2016-12-04 2 views
0

Ich versuche, einen einzelnen Float an meinen Vertex-Shader zu übergeben, damit ich gl_PointSize als Float festlegen kann. Allerdings ist es nicht funktioniert und ich denke, dass es aufgrund ist mir mit glVertexAttribPointer:OpenGL ES: Einzel Float an Vertex-Shader übergeben?

glVertexAttribPointer(1, 1, GLenum(GL_FLOAT), GLboolean(GL_FALSE), GLsizei(MemoryLayout<Vertex>.size), BUFFER_OFFSET(2 * MemoryLayout<Float>.size)) 

ich den Puffer benötigen versetzt, da ich auch bin, die Position vor, dass die Verwendung glVertexAttribPointer Einstellung dieser Verwendung:

glVertexAttribPointer(0, 2, GLenum(GL_FLOAT), GLboolean(GL_FALSE), GLsizei(MemoryLayout<Vertex>.size), BUFFER_OFFSET(0)) 

Diese meine Vertex-Struktur ist:

struct Vertex { 
    var x, y, size: Float 
} 

Dies ist der Vertex-Shader:

attribute vec4 Position; 
attribute float Size; // I tried vec4, no luck 

void main(void) { 
    gl_PointSize = Size; 
    gl_Position = Position; 
} 

Jede Hilfe wäre willkommen!

+0

Woran denken Sie, dass der Aufruf 'glVertexAttribPointer' der Schuldige ist? – derhass

+0

Es hat Vertex im Namen, wenn ich versuche, einen Float zu übertragen, und ich kann nicht denken, was sonst könnte das Problem verursachen, da ein anderer Teil danach funktioniert gut mit – MysteryPancake

+0

Nun, _Vertex_ bedeutet nicht _Vector_. Im GL ist ein Vertex nur eine Menge von Attributen, wobei jedes Attribut ein Skalar oder ein zwei- bis vierdimensionaler Vektor sein kann. Daher ist die Verwendung eines Vertex-Attributs hier in Ordnung. Hast du tatsächlich _enable_ Vertex attribray 1? – derhass

Antwort

0

Reto Koradi hatte die Antwort! Sie müssen glBindAttribLocation vorher aufrufen, wenn Sie den Shader kompilieren, um ihn korrekt zu binden. Es funktioniert jetzt alles!

Bevor ein Moderator mich dazu auffordert, kann ich seine Antwort nicht als richtige Antwort akzeptieren, da es sich um einen Kommentar zu meiner ursprünglichen Frage handelte.