2

Making a 2D OpenGL game. When rendering a frame I need to first draw some computed quads geometry and then draw some textured sprites. When the body of my render method only draws the sprites, everything works fine. However, when I try to draw my geometric quads prior to the sprites the texture of the sprite changes to be the color of the last GL.Color3 used previously. How do I tell OpenGL (well, OpenTK) "Ok, we are done drawing geometry and its time to move on to sprites?"

Here is what the render code looks like:

        // 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();
Dejas
  • 3,511
  • 4
  • 24
  • 36

1 Answers1

3

The default texture environment mode is GL_MODULATE, which does that, it multiplies the texture color with the vertex color.

A easy solution is to set the vertex color before drawing a textured primitive to 1,1,1,1 with:

glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

Another solution is to change the texture environment mode to GL_REPLACE, which makes the texture color replace the vertex color and doesn't have the issue:

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

Dr. Snoopy
  • 55,122
  • 7
  • 121
  • 140