我有一个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());


似乎您以错误的方式使用了internalformatformat

10-08 08:29
查看更多