我使用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"
答案 0 :(得分:0)
这是可以预料的,问题是GL_TEXTURE_CUBE_MAP
实际上只是一种简单的数组纹理形式。使用glTexSubImage2D (...)
将纹理图像上传到立方体贴图时,您必须指明哪个面(实际上是其数组索引)。
立方体贴图的有效面(目标)为:
根据OpenGL规范:
与只有一个目标的标准1D,2D或3D纹理不同, 立方体贴图纹理有六个目标,每个目标对应六个2D纹理 图像立方体面孔。所有这些目标必须一致,完整, 并且具有相等的宽度和高度(即方形尺寸)。
但是,在这种情况下,问题是您的目标,而不是您的尺寸。您可以上传所需纹理图像的任何子区域,此操作不必是方形的。
那就是说,在这种情况下应该提出GL_INVALID_ENUM
而不是GL_INVALID_VALUE
。假设您确实使用GL_TEXTURE_CUBE_MAP
而不是上面列出的6个面部枚举中的一个,那么我倾向于认为这是一个驱动程序错误。我需要看到您传递给glTexSubImage2D (...)
的每个参数以及用于创建图像数据存储的调用最初是肯定的。