ARCore OpenGL 帧缓冲区错误 (1286)
ARCore OpenGL framebuffer error (1286)
我正在尝试在 OpenGL 中使用帧缓冲区从着色器中获取输出纹理并在另一个着色器中使用它以实现模糊效果。
我按照这些教程在我的项目中添加了帧缓冲区。
http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-14-render-to-texture/
http://opengles2learning.blogspot.com/2014/02/render-to-texture-rtt.html
结果我有:
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);
但我收到 glError 1286,这是无效的帧缓冲区错误。我认为问题可能与纹理不是 2 的幂有关。但是我的相机来自 ARCore returns 1080 x 1920。我通过使用 glreadPixel 将相机数据作为位图获取。有没有办法从 ARCore 修改位图或相机的尺寸?
编辑:
我实际上在缓冲区初始化后检查了 glerror,我得到了 glError 1282。我不确定现在出了什么问题。
通过使用渲染到纹理而不是使用渲染缓冲区实现了帧缓冲区。
这是我的工作帧缓冲区初始化:
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);
另外这个问题与ARCore无关。
希望这对某人有所帮助!
我正在尝试在 OpenGL 中使用帧缓冲区从着色器中获取输出纹理并在另一个着色器中使用它以实现模糊效果。
我按照这些教程在我的项目中添加了帧缓冲区。 http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-14-render-to-texture/ http://opengles2learning.blogspot.com/2014/02/render-to-texture-rtt.html
结果我有:
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);
但我收到 glError 1286,这是无效的帧缓冲区错误。我认为问题可能与纹理不是 2 的幂有关。但是我的相机来自 ARCore returns 1080 x 1920。我通过使用 glreadPixel 将相机数据作为位图获取。有没有办法从 ARCore 修改位图或相机的尺寸?
编辑: 我实际上在缓冲区初始化后检查了 glerror,我得到了 glError 1282。我不确定现在出了什么问题。
通过使用渲染到纹理而不是使用渲染缓冲区实现了帧缓冲区。
这是我的工作帧缓冲区初始化:
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);
另外这个问题与ARCore无关。 希望这对某人有所帮助!