Freigeben über


OpenGL-Leistungstipps

Diese Programmierpraktiken optimieren die Leistung Ihrer Anwendung:

  • Verwenden Sie glColorMaterial, wenn nur eine einzelne Materialeigenschaft schnell variiert (z. B. an jedem Scheitelpunkt). Verwenden Sie glMaterial für seltene Veränderungen oder wenn mehr als eine einzelne Materialeigenschaft schnell variiert wird.

  • Verwenden Sie glLoadIdentity-, um eine Matrix zu initialisieren, anstatt Ihre eigene Kopie der Identitätsmatrix zu laden.

  • Verwenden Sie bestimmte Matrixaufrufe wie glRotate, glTranslateund glScale, anstatt Eigene Drehungs-, Übersetzungs- und Skalierungsmatrizen zu erstellen und glMultMatrix-aufzurufen.

  • Verwenden Sie glPushAttrib- und glPopAttrib-, um Zustandswerte zu speichern und wiederherzustellen. Verwenden Sie Abfragefunktionen nur, wenn Ihre Anwendung die Zustandswerte für ihre eigenen Berechnungen benötigt.

  • Verwenden Sie Anzeigelisten, um potenziell speicherintensive Zustandsänderungen zu kapseln. Platzieren Sie beispielsweise alle glTexImage- Aufrufe, die erforderlich sind, um eine Textur (und vielleicht auch die zugeordneten glTexParameter-, glPixelStore-und glPixelTransfer Aufrufe) in einer einzelnen Anzeigeliste anzugeben. Rufen Sie diese Anzeigeliste auf, um die Textur auszuwählen.

  • Verwenden Sie Anzeigelisten, um die Renderingaufrufe von starren Objekten zu kapseln, die wiederholt gezeichnet werden.

  • Um die Netzwerkbandbreite in Client-/Serverumgebungen zu minimieren, verwenden Sie Auch für einfache Oberflächen tessellationen Evaluatoren.

  • Wenn möglich, um den Aufwand von GL_NORMALIZE zu vermeiden, stellen Sie normaler Einheiten bereit. Da glScale fast immer erfordert, GL_NORMALIZE zu aktivieren, vermeiden Sie die Verwendung von glScale- bei der Beleuchtung.

  • Wenn keine glatte Schattierung erforderlich ist, legen Sie glShadeModel- auf GL_FLAT fest.

  • Verwenden Sie nach Möglichkeit einen einzelnen glClear Aufruf pro Frame. Verwenden Sie glClear- nicht, um kleine Unterbereiche der Puffer zu löschen; verwenden Sie ihn nur, um den Puffer vollständig oder fast vollständig zu löschen.

  • Um mehrere unabhängige Dreiecke zu zeichnen, verwenden Sie einen einzelnen Aufruf anstelle mehrerer Aufrufe, um glBegin ( GL_TRIANGLES ) oder einen Aufruf von glBegin ( GL_POLYGON ) zu verwenden. Ähnlich:

    Um ein einzelnes Dreieck zu zeichnen, verwenden Sie GL_TRIANGLES anstelle von GL_POLYGON.

    Verwenden Sie einen einzelnen Aufruf glBegin ( GL_QUADS ) statt wiederholt glBegin ( GL_POLYGON ) aufzurufen.

    Verwenden Sie einen einzelnen Aufruf glBegin ( GL_LINES ), um mehrere unabhängige Liniensegmente zu zeichnen, anstatt glBegin ( GL_LINES ) mehrmals aufzurufen.

  • Verwenden Sie im Allgemeinen die Vektorformen von Befehlen, um vorkompilierte Daten zu übergeben, und verwenden Sie die skalaren Formen von Befehlen, um Werte zu übergeben, die in der Nähe der Anrufzeit berechnet werden.

  • Vermeiden Sie redundante Modusänderungen, z. B. festlegen Sie die Farbe auf denselben Wert zwischen jedem Scheitelpunkt eines flach schattierten Polygons.

  • Wenn Sie Bilder zeichnen oder kopieren, deaktivieren Sie die Rasterung und die Vorgänge pro Fragment, um Ressourcen zu optimieren. OpenGL kann Texturen auf Pixelbilder anwenden.