Jump to content

View more

Image of the Day

Inventory ! Va falloir trouver une autre couleur pour le cadre D: #AzTroScreenshot #screenshotsaturday https://t.co/PvxhGL7cOH
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.


Sign up now

How to color a grayscale texture removing the alpha channel?

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.


  • You cannot reply to this topic
3 replies to this topic

#1 redcoding   Members   

110
Like
0Likes
Like

Posted 31 December 2012 - 09:30 AM

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, 31 December 2012 - 09:37 AM.


#2 Aroidzap   Members   

784
Like
0Likes
Like

Posted 01 January 2013 - 02:47 AM

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);

:)



#3 C0lumbo   Members   

4365
Like
0Likes
Like

Posted 01 January 2013 - 04:07 AM

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.



#4 Sik_the_hedgehog   Members   

3002
Like
0Likes
Like

Posted 01 January 2013 - 04:18 AM

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, 01 January 2013 - 04:21 AM.

Don't pay much attention to "the hedgehog" in my nick, it's just because "Sik" was already taken =/ By the way, Sik is pronounced like seek, not like sick.




Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.