Jump to content
  • Advertisement
Sign in to follow this  
redcoding

How to color a grayscale texture removing the alpha channel?

This topic is 2023 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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
Advertisement

Hi :)

 

I don't know if it will work, but try this (I've used it somewhere)

glEnable(GL_BLEND);
glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_DST_ALPHA);

:)

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
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!