Funkcje OpenGL są zdefiniowane tak, jakby działały synchronicznie. Jednak funkcje renderowania (i inne) często są wykonywane asynchronicznie przez GPU. OpenGL skutecznie to ukryje: jeśli zrobisz coś, co wymaga rezultatów operacji (takich jak odczyt z bufora ramki, który został wyrenderowany), OpenGL zatrzyma procesor CPU, dopóki GPU nie osiągnie tego punktu.Czy istnieje sposób sprawdzenia, czy operacja OpenGL została zakończona?
Jest to funkcjonalne, ale prawie idealne rozwiązanie pod względem wydajności, ponieważ procesor zasadniczo blokuje się do momentu zakończenia pracy GPU. Czy istnieje sposób określenia, czy dana operacja została zakończona, aby wiedzieć, że zależna operacja zostanie wykonana bez tak dużego blokowania procesora?
Świetne pytanie.Ale jest w porządku zarówno pytać, jak i odpowiadać w tym samym czasie? ;) Czy taka kontrola synchronizacji nie może dodać więcej niepotrzebnych kosztów do potoku? –
@MichaelIV: "* Ale czy w porządku jest jednocześnie proszenie i odpowiadanie? *" Tak. To dlatego, kiedy zadajesz pytanie, na dole znajduje się pudełko, które pozwala ci odpowiedzieć na to pytanie, zanim się o to zapyta. Jeśli chodzi o dodawanie "niepotrzebnych kosztów ogólnych", oczekuje się, że ogrodzenia będą dość lekkie. Wewnętrzne procesy sterowników używają zawsze ogrodzeń, dzięki czemu * oni * mogą stwierdzić, kiedy skończy się obiekt bufora i tak dalej. –