我有一个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个浮子的容器放入纹理中。
答案 0 :(得分:1)
我认为你应该尝试
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA32F,
width, height, 0, GL_RGBA, GL_FLOAT, colours.data());
似乎您以错误的方式使用了internalformat
和format
。