【发布时间】:2015-04-06 06:23:00
【问题描述】:
我有一个std::container 格式的图像数据:
struct C
{
float r;
float g;
float b;
float a;
}
看起来像:
std::vector<C> colours(width*height);
其中宽度和高度是我的图像的大小。
现在,我想将其推送到 OpenGL 中的纹理中。
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,GL_RGBA8,width,height,0,GL_RGBA,GL_FLOAT,colours.data());
(总共有 6 个,立方体贴图的每一侧一个。宽度和高度也与立方体贴图的要求相同)。
但我得到了黑色纹理。 GLIntercept 没有给我任何问题的迹象。
所以,在查看https://www.opengl.org/sdk/docs/man/docbook4/xhtml/glTexImage2D.xml 之后,我相信我应该这样称呼它:
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,GL_RGBA8,width,height,0,GL_RGBA32F,GL_FLOAT,colours.data());
变化是我表示我的像素数据是 32 位浮点数,每个像素有 4 个。
但是,这也给了我一个黑色纹理,以及 GLIntercept 告诉我这个调用正在生成一个GL_INVALID_ENUM。
查看相同的文档告诉我,glTexImage2D 在某些情况下会导致GL_INVALID_ENUM,我没有遇到过。
基本上,我只想将我的 4 个浮动容器放入纹理中。
【问题讨论】:
标签: c++ opengl textures glteximage2d