이 주제에 관해 많은 자료를 보았지만 발견 한 예와 약간의 차이점이 있으며 올바른 프로세스를 확실하게 이해하는 데 어려움을 겪고 있습니다. 바라기를 누군가는 나가 맞은 궤도에다는 것을 저에게 말할 수있다. Xcode 3의 최신 버전 인 OS X Snow Leopard에서이 작업을 수행하고 있음을 언급해야합니다.OpenGL 다중 렌더 타겟 설정
예를 들어 정상적인 것과 목표 한 두 가지 대상에 쓰기를 원한다고 가정 해 봅시다. . 내가 다시 프레임 버퍼를 바인딩하고 것, 할 렌더링하기 전에
glGenFramebuffersEXT(1, &mFBO);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBO);
glGenTextures(1, &mTexColor);
glBindTexture(GL_TEXTURE_2D, mTexColor);
//<texture params>
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, mTexColor, 0);
glGenTextures(1, &mTexNormal);
glBindTexture(GL_TEXTURE_2D, mTexNormal);
//<Texture params>
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, mTexNormal, 0);
glGenTextures(1, &mTexDepth);
glBindTexture(GL_TEXTURE_2D, mTexDepth);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, w, h, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, mTexDepth, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)
: 이렇게하려면 나는 하나의 프레임 버퍼를 생성하고이 개 그것에 텍스처뿐만 아니라 깊이 텍스처를 결합
GLenum buffers[] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT };
glDrawBuffers(2, buffers);
이는 것 추가 드로 콜이 내 프레임 버퍼에 그려지는 것을 의미합니다. (제 생각에는?)
그러면 셰이더를 설정하고 장면을 그립니다. 내 버텍스 쉐이더에서는 평소처럼 법선/위치/색상을 처리하고 데이터를 프래그먼트 쉐이더로 전달합니다. 그런 다음 조각은 다음과 같이 처리합니다.
gl_FragData[0] = OutputColor;
gl_FragData[1] = OutputNormal;
이 시점에서 두 개의 질감이 있어야합니다. 하나는 렌더링 된 모든 객체의 색상이고 하나는 법선이있는 색상입니다. 이 모든 것이 맞습니까? 이제는 다른 텍스처처럼 텍스처를 사용할 수 있어야합니다. 전체 화면 쿼드로 렌더링하는 것이 좋을까요?
답변 해 주셔서 감사합니다. 내가 확신하지 못했던 물건을 할당하지 않았 음을 보증하는 보증 유형의 질문 이상의 것이 었습니다. 그리고 그 명령은 괜찮아 보였습니다. 텍스처 대신 렌더 버퍼를 사용하면 성능상의 이점이 있습니까? – TaylorP
@TaylorP 잘 모르겠습니다. –
오래된 질문입니다. 그러나 예, 렌더링 버퍼를 사용하면 텍스처를 사용하는 것과 비교하여 성능이 향상됩니다. renderbuffer는 드로잉 작업을 처리하기위한 데이터와 프로세스를 저장하는보다 최적화 된 방법을 이용할 수 있습니다. – Vallentin