繁体   English   中英

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

[英][OpenGL3.2]Error in glTexSubImage2D with GL_TEXTURE_CUBE_MAP as target and height and width are not same

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

以下是后续调用:glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,* internal_format,* width,* height,0,GL_BGRA,* type,color); glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X,0,*内部格式,*宽度,*高度,0,GL_BGRA,*类型,颜色); glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y,0,*内部格式,*宽度,*高度,0,GL_BGRA,*类型,颜色); glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,0,*内部格式,*宽度,*高度,0,GL_BGRA,*类型,颜色); glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z,0,*内部格式,*宽度,*高度,0,GL_BGRA,*类型,颜色); glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,0,*内部格式,*宽度,*高度,0,GL_BGRA,*类型,颜色); glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,* x_offset,* y_offset,* sub_width,* sub_height,GL_BGRA,* type,color + 10); glTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X,0,* x_offset,* y_offset,* sub_width,* sub_height,GL_BGRA,* type,color + 10); glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y,0,* x_offset,* y_offset,* sub_width,* sub_height,GL_BGRA,* type,color + 10); glTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,0,* x_offset,* y_offset,* sub_width,* sub_height,GL_BGRA,* type,color + 10); glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z,0,* x_offset,* y_offset,* sub_width,* sub_height,GL_BGRA,* type,color + 10); glTexSubImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,0,* x_offset,* y_offset,* sub_width,* sub_height,GL_BGRA,* type,color + 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"

可以预料,问题在于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 (...)每个参数,以及您最初用来创建图像数据存储区的调用,以便确定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM