首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >框架缓冲区是不完整的,android

框架缓冲区是不完整的,android
EN

Stack Overflow用户
提问于 2017-02-11 16:22:04
回答 1查看 917关注 0票数 3

当我试图创建一个框架缓冲区时,我需要一些帮助来找出我做错了什么。

代码语言:javascript
运行
复制
outTex = new int[1];
        GLES20.glGenTextures(2, outTex, 0);
        GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, outTex[0]);

        GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
        GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
        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.glTexImage2D(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
                0,
                GLES11Ext.GL_RGBA8_OES,
                vp.width,
                vp.height,
                0,
                GLES11Ext.GL_RGBA8_OES,
                GLES20.GL_UNSIGNED_BYTE,
                null);
        GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, 0);

        fbo = new int[1];

        GLES11Ext.glGenFramebuffersOES(1, fbo, 0);
        GLES11Ext.glBindFramebufferOES(GLES11Ext.GL_FRAMEBUFFER_OES, fbo[0]);

        GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, outTex[0]);

        GLES11Ext.glFramebufferTexture2DOES(
                GLES11Ext.GL_FRAMEBUFFER_OES,
                GLES11Ext.GL_COLOR_ATTACHMENT0_OES,
                GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
                outTex[0],
                0
        );

        int  status = GLES11Ext.glCheckFramebufferStatusOES(GLES11Ext.GL_FRAMEBUFFER_OES);
        if  (status != GLES11Ext.GL_FRAMEBUFFER_COMPLETE_OES) {
            throw  new  RuntimeException("Framebuffer is not complete: " +
                    Integer.toHexString(status));
        }

        GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, 0);

        GLES11Ext.glBindFramebufferOES(GLES11Ext.GL_FRAMEBUFFER_OES, 0);

我得到的状态是36055,我不知道为什么它是不完整的。要了解更多信息,我想做的事情如下:

我希望在下一个管道中使用外部OES纹理(来自媒体播放器),让我们将其命名为tex0 : tex0 -> GPU进程-> (使用帧缓冲区)结果tex1。tex1也必须是GL_TEXTURE_EXTERNAL_OES。

我已经尝试并成功地使用了绑定到框架缓冲区的TEXTURE_2D,并且每一件事都使用普通的框架缓冲区。

因此,我需要一些帮助,要么我在代码中做错了什么,要么找到了另一种方法(可能使用普通的框架缓冲区)从GPU获得纹理外部的OES。

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2019-01-19 21:17:26

从有关glTexImage2D的目标第一个参数的glTexImage2D页面中删除

指定活动纹理单元的目标纹理。 必须是GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_ TEXTURE_CUBE_MAP_POSITIVE_Z,或 GL_T EXTURE_CUBE_MAP_NEGATIVE_Z.

您正在尝试在一个glTexImage2D上调用GLES11Ext.GL_TEXTURE_EXTERNAL_OES,这不是上面提到的。

从我有限的研究到目前为止,您必须实际绘制到一个框架缓冲器中的OES纹理被绑定到一个texture_2d。从那里,您可以通过帧缓冲区或texture_2d访问像素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42178211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档