Search code examples
c++openglcinder

Conversion to Cinder gl::Texture


I am trying to create a gl::Texture object using image data as a BYTE * with the parameters below.

FreeGLUT - I use this to create a 2d texture and bind it to a quad.:

 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, textureWidth, textureHeight, 0, GL_BGRA_EXT,   GL_UNSIGNED_BYTE, data);
 glBindTexture(GL_TEXTURE_2D, 0); etc etc

This works fine, however I cannot find a way to create a gl::Texture object in Cinder.

 text = gl::Texture(loadImage(loadAsset("text.jpg"))); // works with images files
 text = gl::Texture(data, GL_RGBA8, 640, 480); // BTYE * data This gives me a grey screen -

This seemed the most likely, however I have no idea what to do with Format format = format();

Texture (const unsigned char *data, int dataFormat, int aWidth, int aHeight, Format format=Format()) 

I really have no understanding of how this works and cant find any better tutorials online. Thanks.


Solution

  • apparently dataFormat is the format parameter to glTexImage2D and should be something like GL_RGBA or GL_RGB (or GL_BGRA_EXT as in the example you provided)

    What you want is the "internal format" which is set via the Format struct. So you set it like:

    gl::Texture::Format fmt;
    fmt.setInternalFormat(GL_RGBA8);
    text = gl::Texture(data, GL_RGBA, 640, 480, fmt);
    

    The GL_UNSIGNED_BYTE format is pre-set in that constructor of the cinder wrapper

    Sometimes it can be easier to just look at the code instead of trying to find the 100% applicable documentation