[OpenGL3.2]以GL_TEXTURE_CUBE_MAP为目标,高度和宽度不同的glTexSubImage2D出错

时间:2013-08-28 06:45:40

标签: opengl

我使用glTexSubImage2D和GL_TEXTURE_CUBE_MAP作为目标。如果高度和宽度不同,它会在我的驱动程序上给我GL_INVALID_VALUE。我不确定这种类型的驱动程序行为。据我所知,在Khronos.org上的glTexSubImage2D手册页中没有提到它。 有人面对这个吗?

以下是后续电话: glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,* internal_format,*宽度*高度,0,GL_BGRA,*类型,颜色);     glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X,0,* internal_format,*宽度*高度,0,GL_BGRA,*类型,颜色);     glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y,0,* internal_format,*宽度*高度,0,GL_BGRA,*类型,颜色);     glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,0,* internal_format,*宽度*高度,0,GL_BGRA,*类型,颜色);     glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z,0,* internal_format,*宽度*高度,0,GL_BGRA,*类型,颜色);     glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,0,* internal_format,*宽度*高度,0,GL_BGRA,*类型,颜色);     glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,* x_offset,* Y_OFFSET,* sub_width,* sub_height,GL_BGRA,*类型,颜色+ 10);     glTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X,0,* x_offset,* Y_OFFSET,* sub_width,* sub_height,GL_BGRA,*类型,颜色+ 10);     glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y,0,* x_offset,* Y_OFFSET,* sub_width,* sub_height,GL_BGRA,*类型,颜色+ 10);     glTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,0,* x_offset,* Y_OFFSET,* sub_width,* sub_height,GL_BGRA,*类型,颜色+ 10);     glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z,0,* x_offset,* Y_OFFSET,* sub_width,* sub_height,GL_BGRA,*类型,颜色+ 10);     glTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,0,* x_offset,* Y_OFFSET,* sub_width,* sub_height,GL_BGRA,*类型,颜色+ 10);

where 
name="target" value="GL_TEXTURE_CUBE_MAP"
 name="width" value="8"
 name="height" value="8"
 name="internal_format" value="GL_RG8_SNORM"
 name="x_offset" value="4"
 name="y_offset" value="4"
 name="sub_width" value="2"
 name="sub_height" value="4"
 name="type" value="GL_UNSIGNED_INT_8_8_8_8"

1 个答案:

答案 0 :(得分:0)

这是可以预料的,问题是GL_TEXTURE_CUBE_MAP实际上只是一种简单的数组纹理形式。使用glTexSubImage2D (...)将纹理图像上传到立方体贴图时,您必须指明哪个面(实际上是其数组索引)。

立方体贴图的有效面(目标)为:

  • GL_TEXTURE_CUBE_MAP_POSITIVE_X
  • GL_TEXTURE_CUBE_MAP_POSITIVE_Y
  • GL_TEXTURE_CUBE_MAP_POSITIVE_Z
  • GL_TEXTURE_CUBE_MAP_NEGATIVE_X
  • GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
  • GL_TEXTURE_CUBE_MAP_NEGATIVE_Z

根据OpenGL规范:

  

与只有一个目标的标准1D,2D或3D纹理不同,   立方体贴图纹理有六个目标,每个目标对应六个2D纹理   图像立方体面孔。所有这些目标必须一致,完整,   并且具有相等的宽度和高度(即方形尺寸)。

但是,在这种情况下,问题是您的目标,而不是您的尺寸。您可以上传所需纹理图像的任何子区域,此操作不必是方形的。

那就是说,在这种情况下应该提出GL_INVALID_ENUM而不是GL_INVALID_VALUE。假设您确实使用GL_TEXTURE_CUBE_MAP而不是上面列出的6个面部枚举中的一个,那么我倾向于认为这是一个驱动程序错误。我需要看到您传递给glTexSubImage2D (...)的每个参数以及用于创建图像数据存储的调用最初是肯定的。