我有一段相当简单的 openGL 代码,将 2D 图像绘制为四边形(好吧,作为三角形,但结果是一样的):
wglMakeCurrent(hDC, hRC);
GLuint texture;
glGenTextures(1, &texture);
glBindTexture (GL_TEXTURE_2D, texture);
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, RasterSize.width, RasterSize.height, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, pRaster);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glBegin( GL_TRIANGLE_FAN );
glTexCoord2d(0.0,0.0); glVertex2d(-1.0,+1.0);
glTexCoord2d(1.0,0.0); glVertex2d(+1.0,+1.0);
glTexCoord2d(1.0,1.0); glVertex2d(+1.0,-1.0);
glTexCoord2d(0.0,1.0); glVertex2d(-1.0,-1.0);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
glDeleteTextures(1, &texture);
glDisable(GL_TEXTURE_2D);
SwapBuffers(hDC);
wglMakeCurrent(NULL, NULL);
我有多个窗口,每个窗口都可以运行这段代码(多线程)并绘制一些光栅。尽管应用程序通常会设置帧速率,但出于性能目的,我对最大帧速率感兴趣。
我应该注意,当我第一次初始化窗口时(当 HGLRC 创建时,它与 HWND 相比是缓存的),我使用了 SwapInterval 扩展来关闭 V-Sync。
在某些卡(Nvidia)上,一切都按预期运行。然而,在另一张卡上,可以注意到跳帧。帧被加载并“完成渲染”,即上述方法返回,但只有一些实际出现在屏幕上。启用 VSync 后,帧速率会慢得多,但会出现类似的行为。
我还尝试调用 glFlush() 和 glFinish,但没有帮助。
我会很感激你的想法。