在openGL中跳过的帧

时间:2013-07-14 16:44:36

标签: c++ winapi opengl

我有一段相当简单的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,但没有帮助。

我很感激你的想法。

0 个答案:

没有答案