2008-10-18 14 views
5

Potrzebuję renderować całkiem dużo (dziesiątki tysięcy) obrazów poza ekranem za pomocą OpenGL.
Używam systemu Windows i używam QT jako ramy. rozwiązanie może być tylko oknem, to naprawdę nie ma znaczenia.OpenGL: Szybkie renderowanie poza ekranem

Z tego co znalazłem za pomocą Google istnieje kilka opcji dla tej This article który wydaje się raczej stary zaproponować kilka sposobów, z których odpowiednie są:

  • Okna specyficzny - Wykorzystanie CreateDIBSection i jakoś powiązać z nim teksturę.
  • Użyj rozszerzenia pbuffers, które wydaje mi się obsługiwane na mojej karcie.

This thread (Wiadomość 6) sugeruje QT specyficzny sposób robi to za pomocą QGLWidget::renderPixmap

Moje pytanie brzmi - co jeden byłby najszybszy sposób? pbuffery wydaje się być najbezpieczniejszym zakładem, ponieważ gwarantuje się, że zostanie wykonany na sprzęcie, ale nie używa metody CreateDIB, a także przechodzi przez sprzęt? A co z metodą QT? wydaje się, że z tym problemem powstaje jakiś problem związany z tworzeniem kontekstu. z pewnością nie chciałbym tworzyć nowego kontekstu dla każdego tworzonego przeze mnie obrazu.
Czy ktoś ma dobre doświadczenia z tym?


EDIT: Odpowiadając na komentarz -
mam stałą scenę, która nie zmienia w ogóle, a ja czynią je z różnych punktów widzenia. Na razie obrazy wracają do użytkownika i będą przetwarzane przez procesor. Być może w przyszłości będą one przetwarzane na GPU.

+0

Skąd pochodzą obrazy? Czy wciąż renderujesz tę samą scenę, być może z różnych punktów widzenia? A może ładujesz teksturę po tekstury z dysku? A gdzie idą obrazy? Do obliczeń gpu? Na dysku? Twoja odpowiedź zależy od szczegółów. – ejgottl

+0

Odpowiedziałem na pytanie – shoosh

+0

Może ten link może być przydatny, tutaj użyłem obiektów bufora ramki z 'QGLFrameBuffer' http://stackoverflow.com/questions/19934102/qglwidget-and-fast-offscreen-rendering/ – linello

Odpowiedz

9

Użyj FBO. Jest szybki, przenośny i znacznie przyjemniejszy w użyciu niż bufory.

EDIT: Aby uzyskać najlepszą wydajność, alternatywnego renderowania między dwoma różnymi FBOs:

  1. renderować do
  2. Render do B
  3. Czytaj powrotem z A i proces to
  4. renderować do
  5. Przeczytaj ponownie z B
  6. Przejdź do 2

W ten sposób można odczytywać jeden plik FBO, a następnie przetwarzać go, gdy procesor GPU jest renderowany równolegle do drugiego.

+0

Tak, ja" Właśnie przeczytałem o FBO. na przemian dwa dźwięki jak dobry pomysł. Czy wiesz, czy istnieje różnica między renderowaniem do tekstury a renderowaniem do RenderBuffer? który jest szybszy? – shoosh

+0

Rendering do renderbuffer jest lepszy; jeśli może być szybciej i na pewno nie będzie wolniej. –

+0

dobry link do PBO http://www.songho.ca/opengl/gl_pbo.html –

Powiązane problemy