DGL
https://delphigl.com/forum/

GLslang: Übergabe von Vertexattributen
https://delphigl.com/forum/viewtopic.php?f=20&t=2436
Seite 1 von 1

Autor:  Mars [ Mi Jan 28, 2004 14:02 ]
Betreff des Beitrags:  GLslang: Übergabe von Vertexattributen

Eine Frage bezüglich der Übergabe von Vertexattributen in GLslang (die Antwort kann wahrscheinlich auch in der Dokumentation nachzulesen sein, da ich es zur Zeit aber ohnehin nicht nutzen kann, mag ich mir das Ganze jetzt nicht geben):

Wie wird eigentlich die Übergabe von Vertexattributen in glSlang realisiert, können zusätzlich zu den "normalen" Attributen (glNormal, glColor, ...) ebenfalls die allgemeinen Attribute von GL_ARB_vertex_program verwendet werden, sind also glVertexAttribxxx auch in glSlang integriert, oder sollte hier ein anderer Mechanismus verwendet werden (und wie funktioniert dann die Übergabe von allgemeinen Vertexattributen mit VertexArrays oder VBOs)?

Autor:  Sascha Willems [ Mi Jan 28, 2004 14:15 ]
Betreff des Beitrags: 

In der Dokumentation steht das leider alles andere als konkret drin, aber es geht eigentlich recht logisch. Du musst in deinem Shader eine attribute-Variable angeben, in der dann deine Vertexattribute abgelegt werden, da es sowas wie gl_VertexAttribX im glSlang-Shader leider nicht gibt. Dann musst du OpenGL via glEnableVertexAttribArrayARB mitteilen, das an der Position dieser Variable (die du vorher mittels glGetAttribLocationARB ermittelt hast) ein Vertex-Array-Attribut "liegt", und dann kannste via glVertexAttribPointerARB dein Attributarray übergeben. Für ein VBO sieht das dann in etwa so aus :
Code:
  1. APos := glGetAttribLocationARB(Shader.ProgramObject, 'MeinParameterName');
  2. glEnableVertexAttribArrayARB(APos);
  3. glVertexAttribPointerARB(APos, 3, GL_FLOAT, False, 0, nil);

Im Shader steht dann sowas :
Code:
  1. attribute vec3 MeinParameterName


Wie das in glSlang geregelt wurde gefällt mir zwar nicht sonderlich, aber das ARB wird hoffentlich wissen was es da tut. Kleine Warnung : glVertexAttribPointerARB scheint auf ATI-Treibern nicht zu funktionieren und resultiert bei mir (bei Lars gings auch nicht) immer in ner Exception im OpenGL-Treiber. Ich muss Vertexattribute daher gezwungenermaßen mittels Texturkoordinaten übergeben.

Autor:  Mars [ Mi Jan 28, 2004 14:30 ]
Betreff des Beitrags: 

hmhm, danke, die folgenden Einsprungpunkte sind ja bereits in GL_ARB_vertex_program definiert:

Code:
  1.   glVertexAttribPointerARB: procedure(index: GLuint; size: GLint; atype: GLenum; normalized: GLboolean; stride: GLsizei; pointer: pointer); stdcall;
  2.   glEnableVertexAttribArrayARB: procedure(index: GLuint); stdcall;
  3.   glDisableVertexAttribArrayARB: procedure(index: GLuint); stdcall;


Bedeutet das, dass sie in GLslang nochmals auftreten - dann hätte man ja auch gleich die gesamten glVertexAttribxxx Einsprungpunkte übernehmen können, und sich so eventuell einiges erspart.
glVertexAttribPointerARB funktioniert übrigens auf der GFFX einwandfrei, verwirrend war (für mich) anfangs nur, dass die generischen Vertexattribute zumindest bei GL_ARB_vertex_program sich großteils mit den herkömmlichen Attributen überschneiden.

Na ja, ich schätze die GLslang Implementierung wird sich noch ziemlich ändern, bis sie in den Core übernommen wird (das ist ja auch der Sinn des ARB), und auch an der nächsten Version von GL_ARB_vertex_program und GL_ARB_fragment_program darf noch gefeilt werden.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/