转换为Cinder gl :: Texture

时间:2014-10-05 17:28:08

标签: c++ opengl cinder

我正在尝试使用图像数据作为BYTE *创建一个gl :: Texture对象,其参数如下。

FreeGLUT - 我使用它创建一个2d纹理并将其绑定到四边形。:

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

这很好用,但我找不到在Cinder中创建gl :: Texture对象的方法。

 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 -

这似乎最有可能,但我不知道如何处理Format format = format();

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

我真的不了解它是如何工作的,也无法在线找到更好的教程。感谢。

1 个答案:

答案 0 :(得分:1)

显然dataFormat是glTexImage2D的格式参数,应该类似GL_RGBAGL_RGB(或GL_BGRA_EXT,如您提供的示例所示)

你想要的是内部格式"这是通过Format结构设置的。所以你设置它:

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

在{cinder wrapper

的构造函数中预先设置了GL_UNSIGNED_BYTE格式

有时可以更容易地查看代码而不是尝试查找100%适用的文档