Seite 1 von 1

OpenGL - Optimierung

Verfasst: 21.03.2014, 13:16
von Raven280438
Hi,

ich hab da mal zwei Fragen zur OpenGL Optimierung:

Angenommen, ich rendere hintereinander verschiedene 2D Sprites, die unterschiedliche Shader brauchen, was ist performanter?

1. Ich setze vor jedem Rendern das Shader-Programm

Code: Alles auswählen

glUseProgram(sprite->GetShaderProgram());
2. Ich prüfe, welches Shader-Programm aktuell im Renderer benutzt wird

Code: Alles auswählen

if (sprite->GetShaderProgram() != this->currentShaderProgram)
{
    glUseProgram(sprite->GetShaderProgram());
    this->currentShaderProgram = sprite->GetShaderProgram();
}
Zweite Frage: Im Moment benutze ich zum Rendern von 2D Sprites und zum Rendern von Linien das gleiche Shader-Program. Jedes Vertex hat u.A. auch eine Farbe. Im Fragment-Shader prüfe ich, ob die Texture-Koordinaten > 0 sind, sonst nehme ich die Vertex-Farbe.
Wäre es besser, wenn ich für das Rendern von Linien ein extra ShaderProgram schreibe, und 2 verschiedene Vertex-Typen nehme (mit und ohne Texture-Koordinaten)? Und dann halt das Shader-Program immer hin und her schalte?


Gruß

Re: OpenGL - Optimierung

Verfasst: 21.03.2014, 14:17
von antisteo
Finde erst mal heraus, wo der Flaschenhals liegt.
Erhöhe und Erniedrige mal die Auflösung und beobachtete, ob sich die Framerate ändert. In dem Fall ist die Pixelfüllrate das Problem und du musst den Fragment shader verbessern.

Außerdem kannst du mal die Texturwechsel abschalten und die Framerate beobachten. Dann gibt es noch die Möglichkeit, dass es an der Vertex-Zahl liegt. Das bekommst du heraus, indem du mal einen Teil der Geometrie nicht renderst. Selbiges zeigt aber auch an, wenn du zu viel Draw Calls hast.

Re: OpenGL - Optimierung

Verfasst: 21.03.2014, 15:01
von Raven280438
Hi,

die Frage war rein Interesse halber.
Prüft der Context, bevor ein ShaderProgram gesetzt wird, oder muss ich das selber machen?


Gruß

Re: OpenGL - Optimierung

Verfasst: 22.03.2014, 17:36
von antisteo
Manche Treiber ja, manche Treiber nein.

Mesa beispielsweise hat eine schöne Statemap der GPU und sendet pro Drawcall nur die Änderunen an den Registern.

Re: OpenGL - Optimierung

Verfasst: 22.03.2014, 17:58
von Brainfreeze
Hi,

ok, also ist es im Prinzip das Beste, wenn ich es selber prüfe?


Gruß

Re: OpenGL - Optimierung

Verfasst: 24.03.2014, 11:55
von kimmi
Da der Check ein Vergleich der Handles darstellt ( die sind meine ich GLint oder GLuint ), ist der Test nicht besonders teuer. Schau doch mal im Profiler, ob das wirklich Last macht.

Gruß Kimmi