Search code examples
c#opengltexturesopentkquadratic

How do I stop a texture from darkening after drawing a colored quad in C# OpenTK?


I am creating my own game graphics engine. I have looked into using others like Unity, but they don't fit my needs. Anyway, I am using OpenTK (This is a 2D game), and the issue is that when i draw a texture to the screen, then draw a quad to the screen, the color darkens on the texture. Here is the method I am using to draw a texture:

    public void Texture(int ID, Vector2 size, Vector2 pos, Vector2 texSize, Vector2 texPos)
    {
        pos.Y = -pos.Y;

        GL.Enable(EnableCap.Texture2D);
        GL.BindTexture(TextureTarget.Texture2D, ID);
        GL.Begin(PrimitiveType.Quads);

        GL.TexCoord2(texPos.X, texPos.Y);
        GL.Vertex2(pos.X, pos.Y);

        GL.TexCoord2(texPos.X + texSize.X, texPos.Y);
        GL.Vertex2(pos.X + size.X, pos.Y);

        GL.TexCoord2(texPos.X + texSize.X, texPos.Y + texSize.Y);
        GL.Vertex2(pos.X + size.X, pos.Y - size.Y);

        GL.TexCoord2(texPos.X, texPos.Y + texSize.Y);
        GL.Vertex2(pos.X, pos.Y - size.Y);

        GL.End();
    }

I am inverting the Y because I am used to the Windows Forms coordinate system, where going down is y++. I am calling it like this:

Texture(backdropTextureID, new Vector2(1f, 1f), new Vector2(-0.5f, -0.5f), new Vector2(1f, 1f), new Vector2(0f, 0f));

As expected, if there is nothing else being drawn, it draws a texture with the GL id of backdropTextureID in the center of the screen. When I draw a colored quad also though, the texture is darkened. Here is the method I am using for drawing a quad:

    public void Quad(Vector2 pos1, Vector2 pos2, Vector2 pos3, Vector2 pos4, Color color1, Color color2, Color color3, Color color4)
    {
        GL.Disable(EnableCap.Texture2D);
        pos1.Y = -pos1.Y;
        pos2.Y = -pos2.Y;
        pos3.Y = -pos3.Y;
        pos4.Y = -pos4.Y;

        GL.Begin(PrimitiveType.Quads);

        GL.Color3(color1);
        GL.Vertex2(pos1);

        GL.Color3(color2);
        GL.Vertex2(pos2);

        GL.Color3(color3);
        GL.Vertex2(pos3);

        GL.Color3(color4);
        GL.Vertex2(pos4);

        GL.End();
    }

Again, inverting the Y, for the reason stated above. Also, notice, I am enabling EnableCap.Texture2D in the method for drawing a texture, and disabling it when I draw a colored quad. I am calling the quad method like this:

Quad(new Vector2(0.0f, 0.0f), new Vector2(0.5f, 0.0f), new Vector2(0.5f, 0.5f), new Vector2(0.0f, 0.5f), Color.Gray, Color.Gray, Color.Gray, Color.Gray);

If anyone could help me, thank you in advance. Basically: How do I stop a texture from darkening after drawing a colored quad in C# OpenTK?


Solution

  • For anyone whose having this problem, I figured it out. The same color I was giving to the colored quad i gave to the texture. You just need to add

    GL.Color3(Color.Transparent);
    

    to the start of the texture drawing method.