我正在尝试使用图像数据作为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())
我真的不了解它是如何工作的,也无法在线找到更好的教程。感谢。
答案 0 :(得分:1)
显然dataFormat
是glTexImage2D的格式参数,应该类似GL_RGBA
或GL_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%适用的文档