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

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

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

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



답변

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

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

이므로:

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


답변

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

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

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

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

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


답변