Früher gab es eine Zeit, in der Leute sagten, dass das "Verwalten" der OpenGL-Staaten nützlich sei (siehe dazu einen Artikel aus dem Jahr 2001). Wie diese (C++):Ist es immer noch sinnvoll, OpenGL-Zustände zu cachen?
void CStateManager::setCulling(bool enabled)
{
if (m_culling != enabled)
{
m_culling = enabled;
if (m_culling)
glEnable(GL_CULL_FACE);
else
glDisable(GL_CULL_FACE);
}
}
kann ich sehen, dass dies in einer Situation immer noch nützlich sein, wenn die OpenGL-Server nicht auf der gleichen Stelle wie der OpenGL-Client ist. Aber das ist in meiner 'Spiel'-Engine sicherlich nicht der Fall, nehmen wir an, der OpenGL-Client befindet sich immer auf demselben Rechner wie der OpenGL-Server.
Ist es immer noch (es ist 2017) es wert, dass all diese Prüfcode-Zyklen dauern, anstatt immer nur den Treiber aufzurufen?
Man könnte sagen, dass ich es selbst profilieren sollte, aber ich denke nicht, dass die Ergebnisse von Bedeutung sein werden, weil es so viele verschiedene Grafikkarten, Treiber, CPUs, Betriebssysteme gibt, dass mein persönlicher Test nicht repräsentativ genug sein kann.
EDIT: Und wie über Dinge wie gebundene Puffer, Framebuffer, Texturen, ...
Das hängt davon ab. Wenn Sie viele unnötige Anrufe tätigen, dann werden Sie davon profitieren. Aber am Ende wird es sich "abmessen". Das ist auch das einzige, was jemand anderes tun könnte. – BDL
für Puffer können Sie auch Direct State Access Weg verwenden;) –