我有一个std::container
图像数据,格式为:
struct C
{
float r;
float g;
float b;
float a;
}
所以看起来像:
std::vector<C> colours(width*height);
宽度和高度是我图片的大小。
现在,我想将其推送到OpenGL中的Texture中。
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个浮点数的容器放入纹理中。
最佳答案
我想你宁可尝试
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA32F,
width, height, 0, GL_RGBA, GL_FLOAT, colours.data());
似乎您以错误的方式使用了
internalformat
和format
。