OpenGL에서 Framebuffer와 Renderbuffer의 개념과 차이점은 무엇입니까?


137

Framebuffer와 Renderbuffer의 개념에 대해 혼란 스럽습니다. 렌더링이 필요하다는 것을 알고 있지만 사용하기 전에 이해하고 싶습니다.

임시 드로잉 결과를 저장하는 데 약간의 비트 맵 버퍼가 필요하다는 것을 알고 있습니다. 백 버퍼. 그리고 다른 버퍼는 도면이 진행 중일 때 화면에 표시되어야합니다. 프론트 버퍼. 뒤집어 다시 그리세요. 나는이 개념을 알고 있지만, 그러한 개념들을이 개념들에 연결하는 것은 어렵다.

그것들의 개념과 차이점은 무엇입니까?


7
렌더 버퍼는 프레임 버퍼의 채널과 같은 구성 요소 (컬러, 스텐실, 깊이 등)입니다. 참조 : developer.apple.com/iphone/library/documentation/3DDrawing/…
eonil

2
링크는 iPhone에 따라 다르지만 프레임 버퍼에 대해 잘 설명되어 있습니다.
j00hi

답변:


62

이 페이지 에는 차이점을 아주 잘 설명하는 세부 정보가 있습니다. 먼저 :

OpenGL 파이프 라인의 최종 렌더링 대상을 [the] bufferbuffer 라고합니다 .

이므로:

Renderbuffer 개체
또한이 renderbuffer 개체가 새로 오프 스크린 렌더링을 위해 도입된다. 텍스처 객체로 렌더링하는 대신 장면을 렌더 버퍼 객체로 직접 렌더링 할 수 있습니다. 렌더 버퍼는 렌더링 가능한 내부 형식의 단일 이미지를 포함하는 데이터 저장 개체입니다. 스텐실 또는 깊이 버퍼와 같이 해당 텍스처 형식이없는 OpenGL 논리 버퍼를 저장하는 데 사용됩니다.


196

프레임 버퍼 개체는 실제로 버퍼하지만, 그들의 회전하여 실제 버퍼 하나 개 이상의 첨부를 포함하는 수집기 객체 아니다. 모든 멤버가 버퍼에 대한 포인터 인 C 구조로 Framebuffer 를 이해할 수 있습니다 . 첨부 파일이 없으면 Framebuffer 객체의 설치 공간이 매우 낮습니다.

이제 Framebuffer에 부착 된 각 버퍼 는 Renderbuffer 또는 texture 가 될 수 있습니다 .

Renderbuffer은 실제 버퍼 (바이트, 또는 정수 또는 픽셀들의 배열)이다. Renderbuffer의 네이티브 포맷으로 저장하는 픽셀 값, 그래서 오프 스크린 렌더링에 최적화. 다시 말해, 렌더 버퍼에 그리는 것이 텍스처에 그리는 것보다 훨씬 빠를 수 있습니다. 단점은 픽셀이 구현에 따라 고유 한 형식을 사용하므로 렌더 버퍼 에서 읽는 것이 텍스처에서 읽는 것보다 훨씬 어렵다는 것입니다. 그럼에도 불구하고 일단 렌더 버퍼 가 페인트되면 픽셀 전송 작업을 사용하여 내용을 화면에 직접 복사하거나 다른 렌더 버퍼에 복사 할 수 있습니다 . • 그래도이 방법 Renderbuffer 언급 한 이중 버퍼 패턴을 효율적으로 구현하는 데 사용할 수 있습니다.

렌더 버퍼 는 비교적 새로운 개념입니다. 그 전에는 Framebuffer 를 사용하여 텍스처 를 렌더링했습니다. 텍스처 는 표준 형식을 사용하므로 속도가 느려질 수 있습니다. 텍스처로 렌더링하는 것이 여전히 가능하며, 장면을 만들거나 다른 장면의 표면에 장면을 그리려면 각 픽셀을 여러 번 통과해야 할 때 매우 유용합니다!

OpenGL 위키에는 자세한 내용과 링크를 보여주는 이 페이지 가 있습니다.


13
감사! 구조체와 포인터와 같은 종류의 설명은 나에게 훨씬 더 합리적입니다.
DouglasHeriot

2
이것은 여전히 ​​약간 혼란 스럽습니다. 만약 렌더 버퍼가 다른 렌더 버퍼로의 빠른 복사만을 허용한다면, 거의 사용하지 않을 것입니다! SSAO와 같은 사후 처리 단계를 수행 해야하는 경우 이전에 Textures로 렌더링하여 RenderBuffer에 렌더링 한 다음 화면으로 다시 복사하는 것보다 기본 프레임 버퍼로 렌더링하는 것이 더 쉽지 않습니까?
CoffeDeveloper

4
렌더 버퍼는 사용자 지정 사후 처리를 위해 설계되지 않았습니다. 드로우 절차를 위해 깊이 및 스텐실 정보를 저장하는 데 사용할 수 있습니다. 이는 GPL 구현 자체 만 렌더 버퍼 데이터를 읽을 필요가 있고 기본 형식을 사용하기 때문에 텍스처보다 속도가 빠르기 때문에 가능합니다. 포스트 프로세싱이 필요한 경우 텍스처를 사용하십시오.
fernacolo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.