Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

25.08.2014, 19:59

GL State Changes einsparen

Wie ihr sicher wisst, sind redundante GL State Changes Inperformant.
Aber wie lassen sich diese effizient vermeiden?
Hilft es bereits, wenn man seine eignene States speichert (siehe Beispiel)?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool MyGLStates[NUM_GL_STATES] = { 0 };

void SetGLState(GLenum GLState, size_t StateIndex, bool NewState)
{
    // Check if state change is redundant
    if (MyGLStates[StateIndex] != NewState)
    {
        // Store new state
        MyGLStates[StateIndex] = NewState;
        
        // Set new GL state
        if (NewState)
            glEnable(GLState);
        else
            glDisable(GLState);
    }
}

Würde das die Performance schon etwas verbessern, oder ist das unnötig?

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

2

25.08.2014, 20:04

Kommt natürlich darauf an. Wenn du viele redundante State Changes hast hilft es vielleicht(Je nachdem wie der Treiber das behandelt), wenn du keine hast hilft es garantiert nicht. Prinzipiell ist es natürlich besser wenn man redundante State Changes gleich größten Teils vermeidet.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

25.08.2014, 20:09

Prinzipiell ist es natürlich besser wenn man redundante State Changes gleich größten Teils vermeidet.

Das ist natürlich leichter gesagt als getan ^^

Aber hier (wieter unten bei "Remove redundant state changes") wird im Grunde genau mein Ansatz empfohlen.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

4

25.08.2014, 20:31

Zu beachten ist, dass diese Quelle scheinbar ca. 5 Jahre alt ist.
Also gerade so Dinge wie Enables/Disables solltest du eigentlich nie einfach dauernd durchführen müssen. Die werden einmal richtig gesetzt und dann solltest du mehr oder weniger die ganze Szene damit rendern können.

Was ich persönlich recht hilfreich zur Abschätzung gefunden habe, ist diese Präsentation von Nvidia. Da ich leider gerade nicht weiß wie man direkt eine Seiten(48​) verlinkt mal als Bild:
http://www.imagenetz.de/img.php?file=92fa31042e.png

Aber auch der Rest der Präsentation ist sehr lesenswert...

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

25.08.2014, 20:37

Hilft es bereits, wenn man seine eignene States speichert (siehe Beispiel)?


Ja, das hilft schon. Ist ein gängiger Ansatz das zu tun.
@D13_Dreinig

Werbeanzeige