Android ARCore OpenGL帧缓冲区错误(1286)

Android ARCore OpenGL帧缓冲区错误(1286),android,opengl-es-2.0,arcore,Android,Opengl Es 2.0,Arcore,我试图在OpenGL中使用帧缓冲区从着色器中获取输出纹理,并在另一个着色器中使用它以实现模糊效果 我按照这些教程在我的项目中添加了帧缓冲区。 因此,我: int[] temp = new int[1]; int FramebufferName = 0; GLES20.glGenFramebuffers(1, temp, FramebufferName); fboID = temp[0]; GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, Frame

我试图在OpenGL中使用帧缓冲区从着色器中获取输出纹理,并在另一个着色器中使用它以实现模糊效果

我按照这些教程在我的项目中添加了帧缓冲区。

因此,我:

int[] temp = new int[1];
int FramebufferName = 0;
GLES20.glGenFramebuffers(1, temp, FramebufferName);
fboID = temp[0];
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, FramebufferName);

GLES20.glGenRenderbuffers(1, temp, FramebufferName);
int renderBufferId = temp[0];
GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, FramebufferName);
GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER, GLES20.GL_DEPTH_COMPONENT16, 1080, 1920);
GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER, 
GLES20.GL_DEPTH_ATTACHMENT, GLES20.GL_RENDERBUFFER, renderBufferId);
GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, newTextureID2, 0);
在初始化过程中

在OnDrawFrame方法中,我有:

GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fboId);
GLES20.glViewport(0, 0, 1080, 1920);
但我得到了Glerror1286,这是无效的帧缓冲区错误。我认为问题可能与纹理不是2的幂有关。然而,我的阿科雷相机返回1080 x 1920。我使用glreadPixel以位图的形式获取相机数据。有没有办法从ARCore修改位图或相机的尺寸

编辑:
实际上,我在缓冲区初始化后检查了glerror,得到了glerror 1282。我不确定现在出了什么问题。

通过使用“渲染到纹理”(render to texture)而不是使用“渲染缓冲区”(Renderbuffer),实现了帧缓冲区

以下是我的工作帧缓冲区初始化:

mFrameBuffers = new int[1];
mFrameBufferTextures = new int[1];

GLES20.glGenFramebuffers(1, mFrameBuffers, 0);
GLES20.glGenTextures(1, mFrameBufferTextures, 0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mFrameBufferTextures[0]);
GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, 0,
        GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
        GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
        GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
        GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
        GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFrameBuffers[0]);
GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0,
        GLES20.GL_TEXTURE_2D, mFrameBufferTextures[0], 0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
这个问题也与阿科雷无关。
希望这对别人有帮助

您是否已检查帧缓冲区是否完整?@Reaper是,我使用int e=GLES20.glCheckFramebufferStatusGLES20.GL\u framebuffer;如果e!=GLES20.GL_FRAMEBUFFER_COMPLETE{Log.eMain,FRAMEBUFFER not COMPLETE;}