- glUniform1i(glGetUniformlocation(sh.po, 'MyVar'), 0);
DGL https://delphigl.com/forum/ |
|
glGetUniformLocation > Performance https://delphigl.com/forum/viewtopic.php?f=20&t=10521 |
Seite 1 von 1 |
Autor: | Thmfrnk [ Fr Jul 20, 2012 12:00 ] |
Betreff des Beitrags: | glGetUniformLocation > Performance |
Hallöchen, 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: Code:
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? |
Autor: | end [ Fr Jul 20, 2012 13:39 ] |
Betreff des Beitrags: | Re: glGetUniformLocation > Performance |
man sollte die Locations in Variablen nach dem Linken speichern, diese bleiben nach dem linken, bis zum erneuten linken gleich, siehe: http://wiki.delphigl.com/index.php/glGetUniformLocation nebenbei sollte man das im GLSL tutorial ergänzen... |
Autor: | Thmfrnk [ Fr Jul 20, 2012 14:30 ] |
Betreff des Beitrags: | Re: glGetUniformLocation > Performance |
ja, bei mittlerweile über 60 Shadern wäre das in meinem aktuellen Projekt ein morts Aufwand, daher wüsst ich gern ob das was ausmacht ![]() |
Autor: | Lord Horazont [ Fr Jul 20, 2012 14:39 ] |
Betreff des Beitrags: | Re: glGetUniformLocation > Performance |
.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 |
Autor: | Thmfrnk [ Fr Jul 20, 2012 17:10 ] |
Betreff des Beitrags: | Re: glGetUniformLocation > Performance |
Zitat: .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.. |
Autor: | Lord Horazont [ Fr Jul 20, 2012 17:20 ] |
Betreff des Beitrags: | Re: glGetUniformLocation > Performance |
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 |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |