2013-02-26 1 views
1

나 자신이 만든 모든 fbo를 사용하는 프로그램을 만들고 싶습니다. 나는 그와 같은 렌더링의 일반적인 선례를 알고있다 : 1. egl init. 2. 프로그램 사용. 3. 입력 텍스처 데이터 4. swapbuffer. ,하지만 fbo 렌더링으로 변경했을 때, 그 이유를 모르는 뭔가가 발생했습니다. 저는 여기에 추가 내 코드는 다음과 같습니다OpenGL es2.0에서 직접 프레임 버퍼를 렌더링하는 방법은 무엇입니까?

glGenFramebuffers(1,frame_buf); 
    glBindFramebuffer(GL_FRAMEBUFFER, frame_buf); 
    glGenRenderbuffers(1, &color_buf); 
    glBindRenderbuffer(GL_RENDERBUFFER, s->color_buf); 
    glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, screen_width, screen_height); 
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, s->color_buf); 

은 내가이 추가되면, GL 내가 만든 바인딩 FBO에서 작동 것이라 생각합니다. 하지만 창에 이미지가 보이지 않습니다 ..

답변

0

물론 이미지가 나타나지 않았습니다. 일반적으로 말하자면 기본 프레임 버퍼가 렌더링되도록 렌더링해야합니다. 이것이 가시적 인 이미지의 기본 프레임 버퍼입니다.

중간 렌더링을 FBO에 할 수 있습니다. 하지만 스왑 버퍼 호출을 사용하기 전에 기본 프레임 버퍼로 blit 또는 렌더링해야합니다.

+0

답장을 보내 주셔서 감사합니다.하지만 ios api에서 알 수 있듯이 OpenGL 렌더링은 이미지를 표시하는 렌더링 레이어에 바인딩하는 fbo를 사용합니다. 그래서 비슷한 방법을 egl API를 사용하여 같은 일을하는지 궁금해 .. 당신은 fbo 직접 기본 fbo blit하는 방법을 말해 줄 수 있습니까? – Lustlord

0

당신이 온 화면에 직접 렌더링하려면, 대신 당신이 사용되는 코드의 코드를 사용

glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, screen_width, screen_height); 

변경

[eaglContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:(id<EAGLDrawable>)eaglLayer]; 

glRenderbufferStorage() 오프 스크린에 그려

Android에서 작업하는 경우이 규칙을 따르십시오

#ifdef IOS 

glBindFramebuffer (GL_FRAMEBUFFER, s_FrameBuffer);

#elif ANDROID 

glBindFramebuffer (GL_FRAMEBUFFER, 0);

#endif 
+0

T는 그것이 IOS API에서 비롯되는 것을 알고 있지만, 내가 일하는 환경은 안드로이드입니다 ... 당신의 조언은 작동하지 않습니다. – Lustlord

+0

나는 언급하지 않았습니다. 좋아요, FBO를 IOS와 ANDROID 사이에 설정하는 것과는 조금 다릅니다. – Sung

+0

내 대답이 업데이트되었습니다. 직접 렌더링하려면 glRenderbufferStorage()를 사용하지 마십시오. – Sung

관련 문제