Sign in to follow this  

Dynamically loading and displaying greyscale textures

This topic is 1716 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

I am trying to create a 1 channel texture, and update on the fly with a 1 channel image buffer. Im trying to render the texture at its native black and white.

 

I am creating the storage like so:

glTexStorage2D (
    GL_TEXTURE_2D,
    1,
    GL_R8,
    width,
    height
);

 

And filling it like so (where data is a single channel image buffer):

glTexSubImage2D (
    GL_TEXTURE_2D,
    0,
    0,
    0,
    width,
    height,
    GL_RED,
    GL_UNSIGNED_BYTE,
    data
);

When rendering I am getting a red version of my b/w image.

 

My intention was that the other channels would get duplicates of the red channel (other than alpha which would get 1,0).

 

My shader is generic for any type of texture, and I dont want to have a custom one for greyscale images, as i am also showing non-greyscale images.

 

I was under the impression that GL_LUMINACE would do what I intended, but I thought that was deprecated.

 

I would rather not use a BGRA texture and fill the B G R with the same value coming from my data. Im trying to fill this as fast as possible from a decoded b/w video, and at the same time minimize use of texture memory. I also get RGB video, that i am uploading as BGRA8, which works fine (swizzling and adding A before the upload), but I want to use the same shader.

 

I must be doing something silly, and misunderstanding something.

 

How would I accomplish this?

 

Thanx for any help.

Edited by Ender1618

Share this post


Link to post
Share on other sites

Set a swizzle mask: http://www.opengl.org/wiki/Texture#Swizzle_mask

 

In your case, this should so the trick:

 

GLint swizzleMask[] = {GL_RED, GL_RED, GL_RED, GL_ONE};
glTexParameteriv (GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);

 

That will only need to be set once, at texture creation time.

Share this post


Link to post
Share on other sites

This topic is 1716 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.

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