http://wiki.delphigl.com/index.php/glUniform Bsp.: glUniform1f(location, value); übergibt eine float mit dem Wert value an die location (integer). Mit layout(...) kannst Du diesen Wert dann abrufen und kannst glGetUniformLocation umgehen. Aber wozu, wenn ich fragen darf?
_________________ "Pixel, ich bin dein Vater." -Darf Shader
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Vinz hat geschrieben:
http://wiki.delphigl.com/index.php/glUniform Bsp.: glUniform1f(location, value); übergibt eine float mit dem Wert value an die location (integer). Mit layout(...) kannst Du diesen Wert dann abrufen und kannst glGetUniformLocation umgehen. Aber wozu, wenn ich fragen darf?
Oha, das war jetzt aber mal sowas von falsch mein lieber.
-glGetUniformLocation gibt dir die Addresse der Variable -glUniformXXX setzt den Wert an einer bestimmten Addresse -layout ist ein qualifier und setzt du den Index und/oder die Komponente des Vertex Attribut (normalerweise glBindAttribLocation) bzw. des Fragment-Output (glBindFragDataLocationIndexed)
http://wiki.delphigl.com/index.php/glUniform Bsp.: glUniform1f(location, value); übergibt eine float mit dem Wert value an die location (integer). Mit layout(...) kannst Du diesen Wert dann abrufen und kannst glGetUniformLocation umgehen. Aber wozu, wenn ich fragen darf?
Oha, das war jetzt aber mal sowas von falsch mein lieber.
-glGetUniformLocation gibt dir die Addresse der Variable -glUniformXXX setzt den Wert an einer bestimmten Addresse -layout ist ein qualifier und setzt die Addresse der Variable
von aussen kannst du soweit ich weiss nur das layout der Vertex Attribute (glBindAttribLocation) und Fragment-Farben setzen (glBindFragDataLocationIndexed)
Hä, hab ich nicht das selbe geschrieben? Mit location mein ich ja Adresse. Ach, Du meinst: "Mit layout(...) kannst Du diesen Wert dann abrufen", oder? Ja, da habe ich mich wohl ungenau/falsch ausgedrückt. Genau genommen meinte ich da, dass man hiermit die location für eine Variable festlegen kann, und diese daher dann den Wert bekommt, der mit glUniform an diese Adresse geschickt wurde, man sich also glGetUniformLocation sparen kann. Ist das falsch?
_________________ "Pixel, ich bin dein Vater." -Darf Shader
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Vinz hat geschrieben:
yunharla hat geschrieben:
Vinz hat geschrieben:
http://wiki.delphigl.com/index.php/glUniform Bsp.: glUniform1f(location, value); übergibt eine float mit dem Wert value an die location (integer). Mit layout(...) kannst Du diesen Wert dann abrufen und kannst glGetUniformLocation umgehen. Aber wozu, wenn ich fragen darf?
Oha, das war jetzt aber mal sowas von falsch mein lieber.
-glGetUniformLocation gibt dir die Addresse der Variable -glUniformXXX setzt den Wert an einer bestimmten Addresse -layout ist ein qualifier und setzt die Addresse der Variable
von aussen kannst du soweit ich weiss nur das layout der Vertex Attribute (glBindAttribLocation) und Fragment-Farben setzen (glBindFragDataLocationIndexed)
Hä, hab ich nicht das selbe geschrieben? Mit location mein ich ja Adresse. Ach, Du meinst: "Mit layout(...) kannst Du diesen Wert dann abrufen", oder? Ja, da habe ich mich wohl ungenau/falsch ausgedrückt. Genau genommen meinte ich da, dass man hiermit die location für eine Variable festlegen kann, und diese daher dann den Wert bekommt, der mit glUniform an diese Adresse geschickt wurde, man sich also glGetUniformLocation sparen kann. Ist das falsch?
Siehe mein Update... es sind keine Uniforms in diesen Sinne.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
I see, da kann layout wohl doch mehr. Allerdings kannst du mal abgesehen von einigen Spezialfallen den selben Effekt nicht von Aussen erreichen. Interessant waere es aber damit einen Precompiler zu machen der dann sowas wie die alten Built-In Attribute definiert. Erst dann koennte man sich wirklich glGetUniformLocation und das ganze Binding gemuddel sparen.
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Im Shader:
Code:
layout(location =3)uniformmat4 Matrix;
Das geht allerdings erst mit OpenGL 4.3 und entsprechender GLSL-Version (siehe Link von Vinz).
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Attribute sind einfach die mit in (früher: attribute) deklarierten Variablen im Vertexshader. Uniformvariablen sind globale Variablen, die sich von CPU-Seite aus ändern lassen. Ein anderer Oberbegriff als "GLSL-Variable" fällt mir dazu nicht ein.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.