Sign in to follow this  
redcoding

How to color a grayscale texture removing the alpha channel?

Recommended Posts

Hello,

I need some help understanding what I am doing wrong.

I am drawing text into a texture and then render this texture to the screen. The texture used is a grayscale texture. Why? Because the tutorial I have the code from says it saves memory. OK, so I have white text that I need to color. That means I want to color my grayscale texture when I am drawing it. But the result turns out to be unsatisfying.

I am drawing the texture with a quad, each vertex getting the color red and full alpha (1,0,0,1);

Result 1:
bildschirmfoto20121230un.png
I use this code for blending:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

The red is as expected (full red), but the alpha channel is opaque.




Result 2:
bildschirmfoto20121230ub.png

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);

With this code, I can remove the black background, but the red is rather pale.

Which settings could I use to remove the black background and keep the full red color? Or is this not possible and I should use an RGBA texture in the first place? I could then color the text when rendering it to the texture. Anyway, I want to understand what is going on, before I decide to spend more memory.

Edited by redcoding

Share this post


Link to post
Share on other sites

One option might be to remove your vertex colours, then colour your text using GL_CONSTANT_COLOR/glBlendColor but this is not a good solution as it means you can't combine different coloured text into a single draw call.

 

Your better bet is to get your texture information into your alpha channel somehow, I think the easiest way to achieve this is to use the GL_INTENSITY format instead of the GL_LUMINANCE or GL_RGB format that I assume you're using at the moment.

Share this post


Link to post
Share on other sites

I don't get why it doesn't work either... Make sure that when setting the modulation color you don't mess with the alpha channel somehow, though no idea how it could be affected (would need to know more about how your program works).

 

Also are you sure the red is more pale in the second pic? That looks more like an optical illusion because the background is brighter than black. Also, why do you need separate color and alpha? Black outline? Because if you just want a single color like in the second pic you could ditch the alpha altogether and stick to the single color channel (and halve memory usage, as a bonus).

 

EDIT: I think I know why it may not be working, is the texture in decal mode, by any chance? (wild guess here)

Edited by Sik_the_hedgehog

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this