Wiązanie OpenGL i relacje między podmiotami

12

Jest to głównie pytanie dotyczące dokumentacji. Mam nadzieję, że jest to właściwe miejsce, aby zapytać, a nie na przykład programistów lub stackoverflow.

Nie przeczytałem specyfikacji OpenGL, ale z książek (Red Book) i różnych samouczków nie mogę właściwie zrozumieć, w jaki sposób różne obiekty i części interfejsu API oddziałują na siebie i odnoszą się do siebie.

Na przykład wiem, że jeśli VAO jest związane, wówczas powiązanie VBO i ustawienie atrybutu spowoduje, że VBO zostanie powiązane z VAO.

Ale istnieje wiele obiektów, ich relacje mogą się różnić. Na przykład VAO jest całkowicie niezwiązany z bieżącym programem cieniowania, ale wynik operacji rysowania może zależeć od obu z nich.

Wśród wszystkich różnych komponentów OpenGL widzę pewne relacje, takie jak A-binds-to-B lub A-and-B-are-by-by-by-C. Wszystkie te relacje są zbieżne w określaniu, jak można zmienić stan kontekstu, jak można zmieniać rzeczy, jak razem je zapisywać i optymalizować.

Szukam zasobów wyjaśniających tylko te relacje. Podobnie jak diagram UML, wykres, a nawet dokument tekstowy, który nie koncentruje się na wywołaniach, ale opisuje w zwięzły sposób, w jaki sposób różne komponenty OpenGL oddziałują na siebie i wiążą się ze sobą.

Czy wiesz, gdzie znaleźć taki zasób?

AkiRoss
źródło
3
Świetne pytanie. Mam całą bibliotekę / silnik OpenGL działającą bez super jasnej odpowiedzi na to kluczowe pytanie.
David Van Brink,
1
Powiązanie VBO nie wiąże go z VAO. Zamiast tego można to osiągnąć za pomocą glVertexAttribPointer(). Schemat dla obiektów OpenGL byłby dość płytki i prosty, w rzeczywistości nie ma więcej niż garść różnych obiektów w OpenGL. VAO używają buforów dla atrybutów. Tekstury buforów są wspierane przez bufory. Bufory ramki mają załączniki tekstur. Polecenia do rysowania używają bieżącego VAO, bieżącego programu, bieżącego bufora ramek, bieżących ustawień próbnika oraz bieżącego bufora indeksu / bufora pośredniego. Prawdopodobnie sam możesz narysować schemat.
Dietrich Epp
1
Przepraszam, nie zamierzam narysować dla ciebie obrazu.
Dietrich Epp
2
Dobre pytanie i z tego, co stoję, powodzenia w uzyskiwaniu kompleksowej odpowiedzi bez znaczącej nagrody.
Inżynier
2
Projekt OpenGL jest świetnym argumentem, dlaczego nie należy używać zmiennych globalnych ;)(cały API to jeden wielki bałagan danych globalnych)
glampert

Odpowiedzi:

7

Próbowałem więc namalować własny schemat. Nie jest to wyczerpujące, głównie dlatego, że nie jestem teraz zainteresowany niektórymi rzeczami, ale także dlatego, że chciałem, aby był czytelny (nawet jeśli nie jest to formalnie określony wykres, myślę, że powinien być łatwy do odczytania).

Ponadto, ponieważ wydaje się być interesujące dla niektórych osób, chcę je tutaj udostępnić, aby uzyskać informacje zwrotne i sprawdzić. Użyłem wiki OpenGL jako odniesienia do sprawdzenia poprawności, ale mogłem wprowadzić błędy.

Ponadto, jeśli podane informacje nie są dla Ciebie wystarczające lub pominąłem ważne relacje, które warto uwzględnić na schemacie, możesz je zasugerować, a ja postaram się je aktualizować.

Schemat relacji wiązania OpenGL

Ponownie zachęcamy do zgłaszania błędów, problemów lub sugestii, są one mile widziane.

EDYTOWAĆ

  1. Brakowało związku między rysunkiem a atrybutami: atrybuty muszą być włączone, aby były skuteczne podczas renderowania
AkiRoss
źródło