Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Dez 21, 2024 16:49

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Shader Variablen Nummer vorgeben.
BeitragVerfasst: Mi Sep 24, 2014 22:08 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Mit glGetUniformLocation kann man auslesen, welche Nummer die Uniform Variable hat.

Mit welchen Befehl kann man diese Nummer vorgeben.
Das Z.B. die WorldMatrix die Nummer 2 bekommt.

Im Shader selbst kann man es so machen, aber irgendwie geht es auch extern.
Code:
  1. layout (location = 0) in vec3 inPosition;
  2. layout (location = 1) in vec3 inColor;

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Sep 24, 2014 23:23 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 12:34 
Offline
DGL Member
Benutzeravatar

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)

_________________
Meine Homepage


Zuletzt geändert von yunharla am Do Sep 25, 2014 12:49, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 12:48 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
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?

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 12:50 
Offline
DGL Member
Benutzeravatar

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.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 12:51 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
http://www.opengl.org/wiki/Layout_Quali ... m_location

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 13:09 
Offline
DGL Member
Benutzeravatar

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.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 21:39 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Was muss ich tun, das Matrix_id eine 3 bekommt ?

Code:
  1.   glBindAttribLocation(ProgramID, 3, 'Matrix'); // dies geht nicht
  2.  
  3.   Matrix_id := glGetUniformLocation(ProgramID, 'Matrix');
  4.  
  5.   ShowMessage(IntToStr(Matrix_id)); // Hier sollte ein 3 kommen  

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 21:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
Im Shader:
Code:
  1. layout(location = 3) uniform mat4 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)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 25, 2014 21:55 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
glAwesome hat geschrieben:
Im Shader:
Code:
  1. layout(location = 3) uniform mat4 Matrix;

Das geht allerdings erst mit OpenGL 4.3 und entsprechender GLSL-Version (siehe Link von Vinz).


Darum ging dies bei Matrix nicht, bei der Atributten ging es.


Ich dachte, ich hätte mal ein Beispiele gesehen, bei dem vom C-Code aus, die Werte gesetzt wurden.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Sep 30, 2014 15:39 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Ich dachte, ich hätte mal ein Beispiele gesehen, bei dem vom C-Code aus, die Werte gesetzt wurden.

Ich habe es wieder gefunden.

Code:
  1. GLES20.glBindAttribLocation(programHandle, 0, "a_Position");
  2. GLES20.glBindAttribLocation(programHandle, 1, "a_Color");


Aber leider wie ihr oben beschrieben habt, nur mit den Attributen.

Link

Ich habe noch eine Frage:

Matrix ist eine Uniform-Variable.

Heissen die andern Attrib-Vatriablen ?
Wie heisst der Oberbergriff von beiden zusammen ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Sep 30, 2014 17:28 
Offline
DGL Member
Benutzeravatar

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)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 15 Queries | GZIP : On ]