2D OpenGL ゲームの作成。フレームをレンダリングするときは、最初に計算されたクワッド ジオメトリを描画し、次にテクスチャ スプライトを描画する必要があります。render メソッドの本体がスプライトのみを描画する場合、すべて正常に動作します。ただし、スプライトの前に幾何学的なクワッドを描画しようとすると、スプライトのテクスチャが以前に使用された最後の GL.Color3 の色に変わります。OpenGL (まあ、OpenTK) に「OK、ジオメトリの描画が完了したので、スプライトに移る時が来ましたか?」と伝えるにはどうすればよいですか?
レンダリング コードは次のようになります。
// Let's do some geometry
GL.Begin(BeginMode.Quads);
GL.Color3(_dashboardBGColor); // commenting this out makes my sprites look right
int shakeBuffer = 100;
GL.Vertex2(0 - shakeBuffer, _view.DashboardHeightPixels);
GL.Vertex2(_view.WidthPixelsCount + shakeBuffer, _view.DashboardHeightPixels);
GL.Vertex2(_view.WidthPixelsCount + shakeBuffer, 0 - shakeBuffer);
GL.Vertex2(0 - shakeBuffer, 0 - shakeBuffer);
GL.End();
// lets do some sprites
GL.Begin(BeginMode.Quads);
GL.BindTexture(TextureTarget.Texture2D, _rockTextureId);
float baseX = 200;
float baseY = 200;
GL.TexCoord2(0, 0); GL.Vertex2(baseX, baseY);
GL.TexCoord2(1, 0); GL.Vertex2(baseX + _rockTextureWidth, baseY);
GL.TexCoord2(1, 1); GL.Vertex2(baseX + _rockTextureWidth, baseY - _rockTextureHeight);
GL.TexCoord2(0, 1); GL.Vertex2(baseX, baseY - _rockTextureHeight);
GL.End();
GL.Flush();
SwapBuffers();