问题描述
我正在尝试创建一个简单的程序,该程序要求同时用OpenGL渲染多个窗口(一个窗口接一个窗口渲染是没有意义的,因为那确实很慢)。我唯一能够开始工作的就是为每个窗口创建一个带有OpenGL上下文的线程。
这只是示例代码。我的真实代码在处理输入之前每帧将渲染线程与主线程同步。
#include <iostream>
#include <thread>
#include <GL/glew.h>
#include <SDL.h>
void RenderThread(SDL_Window* window,float r,float g,float b,bool& running) {
SDL_GLContext context = SDL_GL_CreateContext(window);
SDL_GL_MakeCurrent(window,context);
glewInit();
glClearColor(r,g,b,1);
while (running) {
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
SDL_GL_SwapWindow(window);
SDL_Delay(7);
}
SDL_GL_DeleteContext(context);
}
int main(int argc,char* argv[]) {
SDL_Init(SDL_INIT_VIDEO);
bool running1 = true;
bool running2 = true;
SDL_Window* window1 = SDL_CreateWindow("test",SDL_WINDOWPOS_CENTERED,1280,720,SDL_WINDOW_OPENGL);
SDL_Window* window2 = SDL_CreateWindow("test",700,SDL_WINDOW_OPENGL);
std::thread window1Thread(RenderThread,window1,1,std::ref(running1));
std::thread window2Thread(RenderThread,window2,0.5,std::ref(running2));
while (running1 || running2) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_WINDOWEVENT) {
if (event.window.event == SDL_WINDOWEVENT_CLOSE) {
if (SDL_GetwindowID(window1) == event.window.windowID) {
running1 = false;
window1Thread.join();
SDL_DestroyWindow(window1);
} else if (SDL_GetwindowID(window2) == event.window.windowID) {
running2 = false;
window2Thread.join();
SDL_DestroyWindow(window2);
}
}
}
}
SDL_Delay(7);
}
SDL_Quit();
return 0;
}
这在一个窗口上工作正常,但是当我有多个窗口并且占用大量cpu时间时,它会变慢。因为每个窗口的渲染都相互分开,所以这不能正常工作吗?为什么当我同时在另一个线程上进行第二个窗口渲染时,这会减慢速度?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)