To jest mniej pytanie OpenGL i więcej o organizacyjne pytanie C++.Zestawy stanu OpenGL
Będę miał prosty wykres sceny (n-drzewa) z węzłami, które (ze względu na to pytanie) będą renderować pewną geometrię. Mówiąc dokładniej, każdy z nich posiada pewne polecenia do rysowania OpenGL w metodzie draw()
.
Ze względów optymalizacyjnych chciałbym grupować podobne obiekty razem i narysować je wszystkie naraz. Z tego powodu chciałbym wyrazić to, co nazywam "zestawami stanów" dla OpenGL. Ustawiony stan to tylko kilka wiązań OpenGL lub polecenia ustawione przed losowaniem są wywoływane na obiektach X, a następnie zostają rozbrojone później.
Tak więc zestaw stanów ma co najmniej set()
i unset()
i będzie wywoływany przez system renderowania przed i po komendach rysowania węzłów, które używają tego zestawu stanów.
Moje pytanie brzmi: jak wyrazić wspomniane zbiory stanów? Jasne, że wiele funkcji może zrobić, ale wolałbym móc nazwać zestaw i go przywołać. Podobnie jak węzeł A ma zestaw stanów LIGHTING_AND_SHADOW
, a węzeł B ma CEL_SHADING
.
Z tego powodu podejmowania abstrakcyjną klasę o nazwie stateSet
która jest zasadniczo interfejs do metod set()
i unset()
i posiadające każdego zestawu stanu dziedziczą wydaje się dobrym pomysłem. Wymaga to jednak stworzenia kilku obiektów, aby w zasadzie uzyskać nazwę. wygląda na to, że może być lepszy sposób.
Również idealnie chciałbym mieć listę wszystkich stateSets
, które można łatwo przywołać. Na przykład przed rozpoczęciem renderingu dobrze byłoby móc sortować wszystkie węzły na wykresie sceny za pomocą ich stateSet
.
Wszelkie pomysły?
Wygląda na to, że prosisz nas o nadanie nazw twoim zestawom stanów. Czy możesz trochę wyjaśnić, jakiego rodzaju pomocy szukasz. – Mads
Jeśli aktywny program GLSL jest częścią twojego "zestawu stanów", możesz uczynić te "zestawy stanów" częścią swojej klasy programu GLSL: każdy wie, jakie stany musi ustawić i program, który musi aktywować. Następnie zgrupujesz węzły na program przed renderowaniem. – Gigi