【问题标题】:Bind GLES texture to GL_TEXTURE_2D from GL_TEXTURE_EXTERNAL_OES从 GL_TEXTURE_EXTERNAL_OES 将 GLES 纹理绑定到 GL_TEXTURE_2D
【发布时间】:2016-05-16 16:02:28
【问题描述】:

我有一个纹理,绑定到 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]); 提供错误

【问题讨论】:

    标签: android opengl-es android-graphics


    【解决方案1】:

    你不能。纹理目标是纹理对象的基本部分。如果您有external texture,您不能将其视为GL_TEXTURE_2D。完全没有。

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

    【讨论】:

    • 如何使用该纹理的内容?也许我可以将内容复制到另一个纹理,即 GL_TEXTURE2D?
    • 那么没有办法将纹理的内容绑定到 2D 吗?也许我可以以某种方式复制它?
    • @Fr0stDev1:“我如何使用该纹理的内容?” 你在我的帖子中“你不能”之后读到什么了吗?除非它是特别需要 2D 纹理的用途,否则您可以像使用任何其他纹理目标一样使用外部纹理。它甚至有一个关联的采样器和附带的纹理访问函数,以便您可以在着色器中读取它。同样,您可以将其附加到 FBO。它仍然是一种纹理;它只是不是目标GL_TEXTURE_2D 的纹理。唯一的困难是您的着色器需要专门编写才能从其中读取。
    • @NicolBolas “同样,您可以将其附加到 FBO”您确定吗?有多个 QA 说你不能,因为 FBO 需要 RGBA 纹理。我很想知道这是否可能。通常,如果您将 GL_TEXTURE_EXTERNAL_OES 作为目标传递,则 glTexImage2D() 调用会失败。
    • 这里只有一个这样的答案:community.khronos.org/t/…
    猜你喜欢
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2018-03-02
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多