2011-06-14 7 views
2

텍스처 iPhone 코드로 렌더링하면 MSAA를 사용하지 않는 경우에만 작동합니다. 그렇지 않으면 내가 검은 텍스처를 얻습니다. 문제의 원인은 무엇일까요?MSAA가 활성화되어있을 때 iPhone의 텍스처에 대한 OpenGL 렌더링이 실패합니다.

glViewport(0,0, target->_Width, target->_Height); 
glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT Or GL_STENCIL_BUFFER_BIT); 

glBindTexture(GL_TEXTURE_2D, target->_Handle);   

// render stuff here 

glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, target->_Width, target->_Height, 0); 
glBindTexture(GL_TEXTURE_2D, 0); 

답변

0

문제의 원인은 당신의 OpenGL ES에서 멀티 샘플링 된 텍스처를 렌더링 할 수 있다는 것입니다 :

여기 내 코드입니다. 실제로, 올바르게 기억한다면, OpenGL ES에는 멀티 샘플 텍스처가 존재하지 않습니다. 데스크탑 OpenGL을 사용하면 가능하지만 완전히 새로운 텍스처 타겟 (GL_TEXTURE_2D_MULTISAMPLE)을 사용하여 작업을 수행합니다.

멀티 샘플링을 제공하는 버퍼는 일반 텍스처와 동일하지 않습니다. 그래서 Desktop OpenGL은 자체적 인 GLSL 샘플러 유형을 가진 특수 텍스처 타겟을 사용합니다.

+0

그는 (FBO를 사용하여) render-to-texture를하지는 않지만, 이전 스타일의 copy-to-texture를 사용하고 있습니다. –

+0

예, glCopyTexImage2D를 사용하고 있습니다 만, FBO (멀티 샘플링) 렌더링에서 전체 렌더링이 발생하므로 렌더링 논리를 다시 작성해야합니다. – user797443

3

메인 프레임 버퍼에 MSAA를 사용하는 경우 렌더링 할 다른 FBO에도 사용해야합니다. GL_TEXTURE_2D_MULTISAMPLE은 OpenGL ES 2에서 사용할 수 없기 때문에, 내가 찾은 해결책은 일반 렌더링에서 MSAA 렌더링으로 이동하는 것과 동일한 수정을 렌더링 - 텍스처 코드에도 적용하는 것입니다.

멀티 샘플링 된 렌더링 버퍼, 멀티 샘플링 된 깊이 렌더링 버퍼 및 첨부 할 새 FBO의 3 가지 추가 버퍼가 필요합니다. 렌더링하기 전에 텍스처 FBO 대신 새 FBO를 바인딩하십시오. 렌더링 후에 기본 렌더링 코드에서 glResolveMultisampleFramebufferAPPLE()을 사용하는 것과 같은 방법으로 새 ​​MSAA FBO를 텍스처 FBO로 해석합니다.

어떤 이유로 MSAA가 설정된 텍스쳐 렌더링은 시뮬레이터에서없이 으로 동작합니다. 자동으로 GL_TEXTURE_2D_MULTISAMPLE을 사용합니까?

관련 문제