我无法使用 sdl2 在 opengl 中创建两个上下文



我需要一个调试窗口,在这个窗口中我可以更好地观察场景中可能发生的变化,并实时变化,使用sdl2和opengl 3.3我创建了第二个窗口,更改了事件系统以使用多个窗口关闭窗口,但glContext有缺陷,一旦我创建了第一个上下文,就好像第一个上下文似乎存在一样,因此,打破了其中一个窗口的渲染,是否可以使用sdl2使用多个opengl上下文?

this->window=SDL_CreateWindow(title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_OPENGL | (resize ? SDL_WINDOW_RESIZABLE : SDL_WINDOW_SHOWN));
SDL_GLContext windowContext=SDL_GL_CreateContext(this->window);
this->debug=SDL_CreateWindow("debug", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 600, 600, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
SDL_GLContext debugContext=SDL_GL_CreateContext(this->debug);

下面是两个具有不同上下文的窗口的示例:

#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>
#include <stdio.h>
int main(int argc, char **argv) {
(void)argc, (void)argv;
if(SDL_Init(SDL_INIT_VIDEO) < 0) {
fprintf(stderr, "SDL_Init error: %sn", SDL_GetError());
return 1;
}
SDL_Window *windows[2];
SDL_GLContext contexts[2];
for(int i = 0; i != sizeof(windows)/sizeof(windows[0]); ++i) {
char title[32];
snprintf(title, sizeof(title), "window%d", i);
windows[i] = SDL_CreateWindow(title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
640, 480, SDL_WINDOW_OPENGL);
if(!windows[i]) {
fprintf(stderr, "SDL_CreateWindow error: %sn", SDL_GetError());
return 1;
}
contexts[i] = SDL_GL_CreateContext(windows[i]);
if(!contexts[i]) {
fprintf(stderr, "SDL_GL_CreateContext error: %sn", SDL_GetError());
return 1;
}
}
int running = 1;
while(running) {
SDL_Event ev;
while(SDL_PollEvent(&ev)) {
if(ev.type == SDL_KEYDOWN && ev.key.keysym.sym == SDLK_q) {
running = 0;
break;
}
}
SDL_GL_MakeCurrent(windows[0], contexts[0]);
glClearColor(1, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
SDL_GL_SwapWindow(windows[0]);
SDL_GL_MakeCurrent(windows[1], contexts[1]);
glClearColor(0, 1, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
SDL_GL_SwapWindow(windows[1]);
}
return 0;
}

但不需要为每个窗口单独设置上下文。

最新更新