其他分享
首页 > 其他分享> > 可以在OpenGL中从多个Texture2D objs创建一个Texture2D_Array吗?

可以在OpenGL中从多个Texture2D objs创建一个Texture2D_Array吗?

作者:互联网

关于我的打算:

我有一个图像堆栈,出于几个原因,我需要它们全部都是单独的2D纹理.然后,对于某些组合显示,我需要像其中的5-10个将它们融合在一起(在Texture2d_Array中是完美的).我的想法是采用已经上传的2D纹理并将其形成Texture2d阵列. OpenGL给我的功能有可能吗?

备注:我想避免重新加载图像数据,并且出于效率考虑,已经创建的mip映射非常有用,应该保留.因此,诸如“从Tex2d获取数据以创建新的Tex2Darray-layer”之类的操作是愚蠢的.

如果失败了,我的后退将是在我的着色器中有大约10个采样器,然后在显示之前将它们相加/平均.

解决方法:

一切皆有可能!好吧,几乎任何东西

根据可用的OpenGL版本,可以考虑一些选项.这是如果您确实需要复制数据.当然,到目前为止,最好的选择是首先将纹理数据加载到数组纹理中,并避免多余的副本.

glCopyImageSubData()

glCopyImageSubData()与所需功能非常直接匹配.唯一的缺点是它仅在OpenGL 4.3和更高版本中可用.

glCopyTexImage2D()

我仅出于完整性考虑而提及此问题,以防有人以稍微不同的用例查看此答案.通过将源纹理设置为FBO附件,通常可以将glCopyTexImage2D()用于复制纹理数据.

但是事实证明,它不支持GL_TEXTURE_2D_ARRAY,因此不能用于从常规纹理复制到数组纹理.另一个方向会起作用.

glBlitFramebuffer()

glBlitFramebuffer()在OpenGL 3.0和更高版本中可用,并且可以用于复制几乎任何类型的帧缓冲区/纹理数据.

要从一个纹理复制到另一个纹理,请创建两个FBO.您将其中之一绑定为GL_READ_FRAMEBUFFER,并将源纹理附加到该纹理上.将第二个绑定为GL_DRAW_FRAMEBUFFER,然后将目标纹理附加到该纹理上.然后,您调用glBlitFramebuffer().

标签:textures,texture2d,opengl,c,c-4
来源: https://codeday.me/bug/20191028/1949293.html