我需要一些帮助来找出我在尝试创建帧缓冲区oes时做错了什么。

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。
我已经尝试并成功地使用绑定到帧缓冲区的纹理
所有的事情都用普通的帧缓冲区。
因此,我需要一些帮助,要么是我在代码中做错了什么,要么是找到另一种方法(可能使用普通帧缓冲区)从gpu获取纹理外部oes。
非常感谢。

最佳答案

从关于glTexImage2D的目标[第一个参数]的man页:
指定活动纹理单元的目标纹理。
必须是gl_纹理_2d,
纹理立方体贴图正x,
gl_纹理_立方体_贴图_负_x,
gl_texture_cube_map_positive_,
gl_texture_cube_map_阴性,
格列
纹理立方体贴图正z,或
格莱特
外部立方体映射负Z。
您试图在一个glTexImage2D上调用GLES11Ext.GL_TEXTURE_EXTERNAL_OES,这不是上面的一个。
从目前为止我有限的研究来看,你必须将oes纹理绘制到绑定到纹理的帧缓冲区中,从那里你可以通过帧缓冲区或纹理访问像素。

08-04 08:36