我在Windows 7 64位下使用C语言中的GLFW3 + OpenGL。由于响应式调整大小对我的应用程序非常重要,我使用辅助线程进行逻辑+渲染循环,因此当UI线程阻塞时(例如当用户将鼠标按住窗口框架时),渲染不会被中断)。
这很有效,只是在用户调整窗口大小时,它有时会导致窗口内容闪烁。我怀疑还有一些东西我还没有完全理解从二级线程渲染的后果以及与窗口大小调整的可能交互 - 这是我第一次使用多线程。
这是一个重现问题的最小代码示例:
#include <GL/gl3w.h>
#include <GLFW/glfw3.h>
#include <pthread.h>
GLFWwindow* window;
void *threadfun(void *arg);
int main () {
pthread_t mythread;
glfwInit();
window = glfwCreateWindow(640, 480, "Test", NULL, NULL);
pthread_create(&mythread, NULL, &threadfun, (void *)NULL);
while (!glfwWindowShouldClose(window)) glfwWaitEvents();
pthread_join(mythread, NULL);
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
void *threadfun (void *arg) {
glfwMakeContextCurrent(window);
gl3wInit();
glClearColor(0.0f, 0.5f, 0.0f, 1.0f);
while (!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
}
}
(我正在使用mingw-w64 x86_64-6.3.0-posix-seh-rt_v5-rev1
进行编译,以防相关。)