2009-09-04 13 views
12

Do renderowania Mam bieżący kontekst GL powiązany z oknem. W przypadku, gdy aplikacja renderuje wiele scen (na przykład za pomocą kumulacji lub różnych rzutni), uważam, że można ponownie użyć tego samego kontekstu.Dlaczego warto używać wielu kontekstów OpenGL

Moje pytanie brzmi: dlaczego powinienem używać wielu kontekstów GL? W specyfikacji ARB_framebuffer_object czytałem, że wywołanie MakeCurrent może być kosztowne, aw przypadku, gdy obecne jest rozszerzenie ARB_framebuffer_object, mogę renderować na ogólnym buforze bez używania MakeCurrent.

Najwyraźniej jedynym powodem używania wielu kontekstów GL jest unikanie ustawiania stanu kontekstu (przechowywanie pikseli, przenoszenie, rozmiar punktu, wielokątny ...) lub posiadanie wielu konfiguracji buforów renderowania (jeden kontekst z kumulacją, inny bez). Jak powinienem decydować, kiedy lepiej jest użyć kontekstu alternatywnego zamiast ustawiania stanu kontekstu?

Odpowiedz

11

Zwykle używam dodatkowych kontekstów tylko wtedy, gdy absolutnie muszę, na przykład renderowania do wielu okien GUI. W przypadku innych elementów używam obiektów bufora ramki lub zmian stanu.

Jednak takie zalecenia dotyczące wydajności nie mają zastosowania we wszystkich przypadkach. W razie wątpliwości należy zmierzyć własną aplikację na swoim sprzęcie. gDEBugger może pomóc, dostępna jest wersja próbna.

2

W programach GUI można mieć wiele widoków OpenGL, gdzie niektóre z nich działają w tym samym wątku, co GUI, a inne działają we własnym wątku. Co więcej możesz uruchomić OpenGL w trybie poza ekranem. Przynajmniej jeden kontekst na wątek.

Nie jestem pewien, czy ma sens więcej kontekstów na wątek.

4

Jeśli chcesz zaadresować wiele procesorów graficznych, musisz użyć wielu kontekstów, ponieważ masz co najmniej jeden losowy na GPU, w kontekście specyficznym dla GPU.

6

IIRC, obiekty takie jak tekstury i obiekty buforów mogą być współdzielone między kontekstami, więc technicznie można utworzyć drugi kontekst w drugim wątku i załadować tekstury tam asynchronicznie, nie martwiąc się, czy pierwszy wątek wykonuje renderowanie.

Powiązane problemy