OpenGL从4 *浮点格式(C ++)上传像素数据

时间:2015-04-06 06:23:01

标签: c++ opengl textures glteximage2d

我有一个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个浮子的容器放入纹理中。

1 个答案:

答案 0 :(得分:1)

我认为你应该尝试

glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA32F,
             width, height, 0, GL_RGBA, GL_FLOAT, colours.data());

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