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



我有一个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个浮动容器变成一个纹理。

我认为你应该试试

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

似乎您使用internalformatformat的方式不对。

相关内容

  • 没有找到相关文章

最新更新