OpenGL - Optimierung

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Raven280438
Establishment
Beiträge: 140
Registriert: 03.10.2010, 20:14

OpenGL - Optimierung

Beitrag 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ß
antisteo
Establishment
Beiträge: 854
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem

Re: OpenGL - Optimierung

Beitrag 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.
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Raven280438
Establishment
Beiträge: 140
Registriert: 03.10.2010, 20:14

Re: OpenGL - Optimierung

Beitrag 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ß
antisteo
Establishment
Beiträge: 854
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem

Re: OpenGL - Optimierung

Beitrag 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.
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Brainfreeze
Beiträge: 21
Registriert: 20.06.2012, 20:14

Re: OpenGL - Optimierung

Beitrag von Brainfreeze »

Hi,

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


Gruß
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: OpenGL - Optimierung

Beitrag 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
Antworten