2016-05-16 289 views
2

我有一个质地GL_TEXTURE_2D,势必GL_TEXTURE_EXTERNAL_OES目标绑定GLES纹理从GL_TEXTURE_EXTERNAL_OES

GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textures[0]); 
    GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); 
    GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); 
    GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST); 
    GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST); 

怎样才能重新绑定到GL_TEXTURE_2D目标? GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);提供了错误

回答

3

你不能。纹理目标是纹理对象的基本部分。如果你有一个external texture,你不能对待它像一个GL_TEXTURE_2D。完全一样。

这意味着如果要绑定它,则必须将其绑定为GL_TEXTURE_EXTERNAL_OES纹理。如果您想在采样器中使用它,则该采样器必须是samplerExternalOES而不是sampler2D(并且着色器必须启用适当的扩展名)。等等。

+0

如何使用该纹理的内容?也许我可以将内容复制到另一个纹理,即GL_TEXTURE2D? – Fr0stDev1

+0

因此,没有任何方法将纹理的内容绑定到2D上?也许我可以以某种方式复制它? – Fr0stDev1

+0

@ Fr0stDev1:“*我怎样才能使用那个纹理的内容?*”你在我的帖子中看过“你不能”之后的任何内容吗?除非特别需要* 2D纹理,否则可以像使用其他纹理目标一样使用外部纹理。它甚至有一个伴随纹理访问函数的相关采样器,以便您可以在着色器中读取它。同样,你可以将它附加到一个FBO。它仍然是一种质地;它只是不是目标'GL_TEXTURE_2D'的纹理。唯一的困难是你的着色器需要专门编写才能读取。 –