Я пытаюсь использовать кадровый буфер в 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 возвращает 1080 x 1920. Я получаю данные камеры в виде растрового изображения с помощью glreadPixel. Есть ли способ изменить размер растрового изображения или камеры из ARCore?
РЕДАКТИРОВАТЬ: я действительно проверил glerror после инициализации буфера и получаю glError 1282. Теперь я не уверен, что не так.
int e = GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER); if (e != GLES20.GL_FRAMEBUFFER_COMPLETE) { Log.e("Main", "Framebuffer not complete"); }
- person snowrain   schedule 08.11.2017