0

私は、2D画像をクワッドとして描画するかなり単純なopenGLコードを持っています(三角形としても、結果は同じです):

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); 

複数のウィンドウがあり、それぞれが描画するラスターを使用してこのコード (マルチスレッド) を実行できます。通常、アプリケーションはフレームレートを設定しますが、私はパフォーマンスのために最大フレームレートに関心があります。

初めてウィンドウを初期化したとき (HWND に対してキャッシュされる HGLRC が作成されたとき)、SwapInterval 拡張機能を使用して V-Sync をオフにしたことに注意してください。

一部のカード (Nvidia) では、すべてが期待どおりに動作します。ただし、別のカードでは、フレームのスキップが見られます。フレームがロードされ、「レンダリングを終了」します。つまり、上記のメソッドは戻りますが、実際に画面に表示されるのは一部だけです。VSync をオンにすると、フレームレートが大幅に遅くなりますが、同様の動作が表示されます。

glFlush() と glFinish の呼び出しも試みましたが、役に立ちませんでした。

よろしくお願いします。

4

0 に答える 0