如何在GL_TEXTURE_CUBE_MAP纹理中使用glCopyImageSubData?

时间:2014-09-04 13:14:11

标签: opengl textures texture-mapping

如果我创建两个纹理 1. srcID 2. destID

两种类型GL_TEXTURE_CUBE_MAP

  

glTexStorage2D(GL_TEXTURE_CUBE_MAP,6,GL_RGBA8,32,32);

现在" srcID"填充了所需的所有纹理数据。 那么使用什么参数来复制整个" srcID" to" destID"。 试过很多组合,但它总是给出错误。

1 个答案:

答案 0 :(得分:1)

这是未经测试的,纯粹来自研究手册页和规范文档:

glCopyImageSubData(srcID, GL_TEXTURE_CUBE_MAP, 0, 0, 0, 0,
                   destID, GL_TEXTURE_CUBE_MAP, 0, 0, 0, 0,
                   32, 32, 6);

最不明显的部分是如何指定要复制所有立方体贴图面。规范说明了目标论点:

  

接受所有非代理纹理目标,但表8.19中描述的TEXTURE_BUFFER和立方体贴图面选择器除外。

这告诉我GL_TEXTURE_CUBE_MAP必须用于那些参数,而不是特定的面孔。

然后关于如何指定要复制所有6个立方体贴图面,这部分是相关的(由我添加突出显示):

  

一维数组,二维数组,立方体贴图数组或三维纹理的切片,或立方体贴图纹理的面都是兼容的,前提是它们共享兼容的内部格式,通过指定带有srcZ和dstZ 的起始切片,并通过一次调用,可以在这些对象之间复制多个切片或要使用srcDepth复制的切片。根据表8.19中指定的顺序, Cubemap纹理始终有六个面,这些面由基于零的面部索引选择。

因此,复制所有6个面应该适用于srcZdstZ使用0,srcDepth使用6。