2010-02-04 8 views
15

OpenGL FrameBuffer Objects (FBO)를 처리하는 가장 좋은 방법은 오래전부터였습니다. FBO를 전환하는 데 많은 비용이 걸릴 수 있지만 새로운 첨부 파일도 정의 할 수 있습니다.OpenGL에서 FBO를 처리하는 가장 좋은 방법은 무엇입니까?

어떻게 하시겠습니까? ? 모든 변경 부착

  • 1 FBO하지만 각각의 식 코멘트 사이에

  • 1 FBO를 전환하지 않는 렌더링 대상에게 (크기 + 형식) 렌더링 :

    나는이 3 사이에 주저 통로. 즉, 유사한 렌더 타겟에 대해 동일한 FBO를 재사용한다는 의미입니다. 하지만 이런 방식으로 커스텀 블러는 4+ FBO를 소비하게됩니다. 각

  • 1 FBO 또한

, I는 FBO 스위치의 수를 최소화한다 번만 타겟 세트 첨부 렌더링 다음 식 코멘트

을 전환 (I 텍스처 바인딩의 수를 최소화 등)?

+0

... FBO 란 무엇입니까? 약어를 여러 번 사용하려면 처음 확장되지 않은 것을 사용하는 것이 좋습니다. – fortran

+4

FBO = Framebuffer Object – ponce

+0

좋은 질문. 아래에 주어진 답변의 첫 번째 부분은 책 "OpenGL Insights"에서 언급 한 내용과 모순됩니다.이 책에서는 여러 FBO 사이를 전환하는 데 많은 비용이 들고 성능을 향상시키는 가장 좋은 방법은 동일한 FBO에 대한 여러 개의 첨부 파일. –

답변

14

업데이트 참조 :


NVIDIA 2005 (아마 오래된) : 마지막 공식 성능 추천 내가 아는 NVIDIA는 거의 다섯 살입니다.그의 GDC presentation에서, 사이먼 그린 다음 (슬라이드 29)를 권장합니다

증가 성능을 위해

:

  1. 여러 식 코멘트
    • 당신이 렌더링 할 각 텍스처에 대해 별도의 FBO를 생성 to
    • 스위치 사용 BindFramebuffer()
    • 은 베타 NVIDIA 드라이버에서 wglMakeCurrent()보다 2 배 빠릅니다.
  2. 하나씩 FBO 다중 텍스처 첨부
      텍스처 사이
  3. 하나씩 FBO 다중 텍스처 첨부
    • 를 전환 동일한 포맷 및 크기
    • 사용 FramebufferTexture() 있어야
    • 텍스처 다른 색상의 첨부 파일에 질감을 첨부하십시오.
    • ,451,515,
    • 사용 glDrawBuffer() 다른 색 첨부 파일 내 경험에

로 렌더링 전환, 두 번째 경우는 더 빨리 첫 번째 (ATI 라데온 HD4850, 지포스 8800GT)에 비해 정말이다. 제 코드를 복잡하게 만들었 기 때문에 제 3의 경우를 시도하지 않았습니다.

+0

여기 [GDC 프리젠 테이션] (https://developer.nvidia.com/sites/default/files/akamai/gamedev/docs/Porting%20Source%20to%20Linux.pdf)에는 분명히 연결로 인해 첨부 파일을 전환하지 않는다고 언급되어 있습니다. 나쁜 성능. 따라서이 성능 순서와 모순됩니다. – Deathicon

+0

내가 언급 한 발표 내용은 2005 년부터이며, 결과는 2009 년부터입니다. 지난 10 년 동안 실적 순서가 변경되면 나는 놀라지 않을 것입니다. –

+0

나는 또한이 [링크] (https://software.intel.com/en-us/articles/opengl-performance-tips-swap-frame-buffer-objects-fbo-instead-of-surfaces-using- (# 2 및 # 3) 대신 FBO (# 1)를 전환하는 것이 더 나은 성능을 나타냅니다. 이 질문에 대한 답변을 업데이트하는 것이 좋습니다. – Deathicon

4

철학 문제로 개체 상태를 수정하려면 개체 상태를 다시 확인해야합니다. 대신, 단순히 이전 프레임에서 유효했던 객체 바인딩을 변경하는 것이 드라이버 [1]에 대해 더 빨라야합니다.

첫 번째 구현에서는 각 렌더링 대상에 대해 1 FBO가 필요합니다. (보다 정확하게는 대상 으로 설정하고 대개 한 번에 여러 버퍼로 렌더링합니다.)

즉, 여러 가지 구현에서 앱을 벤치마킹하는 것보다 뛰어난 것은 없습니다.

[1] FBO 변경은 아키텍처에 따라 GPU 플러시를 강제 할 수 있기 때문에 드라이버에 대해 언급합니다. 대부분의 경우 거품이 생깁니다. 그래서 당신이 자주하고 싶지 않은 것이 분명합니다. 텍스처 바인딩을 최적화하는 것보다 더 중요합니다.

관련 문제