2017-11-08 35 views
0

OpenGL에서 프레임 버퍼를 사용하여 출력 텍스처를 셰이더에서 가져 와서 다른 셰이더에서 사용하여 흐림 효과를 얻으려고합니다.ARCore OpenGL 프레임 버퍼 오류 (1286)

나는이 튜토리얼을 따라 내 프로젝트에 프레임 버퍼를 추가했다. 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가 발생했습니다. 지금 무엇이 잘못된 것인지 잘 모르겠습니다.

+0

프레임 버퍼가 완료되었는지 확인 했습니까? – Reaper

+0

@Reaper 예 을 사용하여 검사했습니다. int e = GLES20.glCheckFramebufferStatus (GLES20.GL_FRAMEBUFFER); if (e! = GLES20.GL_FRAMEBUFFER_COMPLETE) { Log.e ("Main", "Framebuffer not complete"); }' – snowrain

답변

0

Renderbuffer를 사용하는 대신 render-to-texture를 사용하여 프레임 버퍼를 달성했습니다.

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 무관했다 :

여기 내 작업 프레임 버퍼 초기화합니다. 희망이 있으면 도움이됩니다.