【问题标题】:Alternative for glBlitFrameBuffer() in OpenGL ES 2.0OpenGL ES 2.0 中 glBlitFrameBuffer() 的替代方案
【发布时间】:2014-08-22 03:34:19
【问题描述】:

我的 Android 程序必须使用 glBlitFrameBuffer() 函数来复制 FrameBuffer 对象。但glBlitFrameBuffer() 函数仅在 OpenGL ES 3.0+ 设备上受支持。我想支持 OpenGL ES 2.0+ 设备。

这个功能有什么解决方案/替代方案吗?

【问题讨论】:

    标签: android opengl-es opengl-es-2.0 framebuffer


    【解决方案1】:
    1. 在源帧缓冲区上绑定用作颜色附件的纹理
    2. 绑定目标帧缓冲区
    3. 绘制全屏四边形(如果您需要使用顶点/tex 坐标进行拉伸或偏移读取操作)
    4. 从 frament 着色器中的绑定纹理中获取数据并将其放入 gl_FragColor

    【讨论】:

      【解决方案2】:

      我创建了一个 CopyShader,它仅使用着色器从纹理复制到帧缓冲区。

      private static final String SHADER_VERTEX = ""
            + "attribute vec4 a_Position;\n"
            + "varying highp vec2 v_TexCoordinate;\n"
            + "void main() {\n"
            + "  v_TexCoordinate = a_Position.xy * 0.5 + 0.5;\n"
            + "  gl_Position = a_Position;\n"
            + "}\n";
      
        private static final String SHADER_FRAGMENT = ""
            + ""
            + "uniform sampler2D u_Texture;\n"
            + "varying highp vec2 v_TexCoordinate;\n"
            + "void main() {\n"
            + "  gl_FragColor = texture2D(u_Texture, v_TexCoordinate);\n"
            + "}\n”;
      

      使用这些作为着色器,然后只需将u_Texture 设置为您想要 复制的纹理,并绑定您想要写入的帧缓冲区,然后您就应该设置好了。

      【讨论】:

        猜你喜欢
        • 2019-05-28
        • 2012-03-21
        • 2012-10-16
        • 1970-01-01
        • 2014-03-18
        • 2012-03-31
        • 2011-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多