ich hab grad mal hier gDEbugger am laufen. Ist ja ein echt geiles Programm!!! Doch dies sagt mir das ich glGetUniformLocation ziemlich oft beim Rendern aufrufe.. das ist in der Tat so...
Zitat:
Using "Get" or "Is" functions slows down render performance. These commands force the graphic system to execute all queued OpenGL calls before it can answer the "Get" or "Is" query. Some get functions such as this one are necessary, but only during the initialization of the OpenGL application. Avoid using these get functions outside the application initialization.
mhh.. Ich hab im Wiki nirgends gelesen das dies so fatal ist.. ich übergebe meine Uniforms immer direkt so:
So hab ich immer schön Ordnung.. Doch dies mach ich extrem oft im Program, da ich auch viele Shader nutze.. Nun die Frage: Wie sehr bremst denn diese Methode?
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
.o(klingt nach nem bug im design wenn das nicht in einer Shaderklasse implementiert werden kann )
Ja, das wird ziemlich sicher was ausmachen. Das zerlegt die parallelität von OpenGL. Wenn du OpenGL zeichenaufträge gibts, werden die an die Grafikkarte geschickt und dann hast du schon die Kontrolle wieder. D.h. du kannst weitere Aufträge geben und während dessen zeichnet die Grafikkarte fröhlich vor sich hin. Wenn du aber glGet* aufrufst, muss OpenGL warten bis alle Befehle ausgeführt wurden, da diese ja den Rückgabewert von glGet* beeinflussen könnten. Das bremst die Sache durchaus aus, besonders wenn es oft passiert. Dann wartest du immer wieder auf OpenGL, obwohl du die Zeit sinnvoller nutzen könntest (weitere Befehle senden, Logik berechnen…)
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
.o(klingt nach nem bug im design wenn das nicht in einer Shaderklasse implementiert werden kann )
nunja ich habe schon meine TGLSLShader klasse. Doch hier hätt ich nun 2 Möglichkeiten:
1. Ich erstelle mir pro Shader eine abgeleitete Klasse von TGLSL und nutze Propertys als Uniforms.. Hier würde ich beim Create dann alle Locations suchen und privat speichern. Dies wäre die "schöne" Variante. Nachteil: Ich müsste für jeden Shader eine neue Klasse machen..
2. Ich bau mir eine Uniformlocation Liste in meine TGLSLShader klasse und eine Funktion "AddUniform(Name)"... In diese Liste enthalten ist dann entsprechend der Name und die entsprechende Lokalisierte ID. Hier ist jedoch der nachteil, das wenn ich beim Rendern nun eine Uniform zuweise, er erst in der Liste nach passenden Suchen muss..
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Das ist beides unschön, da stimme ich zu. Das einzig gut mögliche wäre ne Hashliste, die sollte ausreichend schnell beim raussuchen der IDs sein. Oder da wo du die schader verwendest die IDs cachen.
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.