pyglet と OpenGL 4 スタイルのシェーダーを使用しようとしています (つまり、行列演算を使用せず、(layout=...) などを使用して...)
次のような基本的な頂点シェーダーがあります。
#version 400
uniform mat4 projectionMatrix;
uniform mat4 modelviewMatrix;
uniform vec2 offset;
varying vec4 vertex_color;
layout(location=0) in vec4 inVert;
layout(location=1) in vec4 inColor;
void main() {
gl_Position = projectionMatrix * ( modelviewMatrix * ( inVert + vec4(offset.x, offset.y, 0, 0) ) );
vertex_color = gl_Color;
}
基本的なフラグメント シェーダー:
#version 400
varying vec4 vertex_color;
out vec4 outColor;
void main(){
outColor = vertex_color;
}
私が使う
a = pyglet.graphics.vertex_list(num*3, ('v4f', vs), ('c4f', color))
描画リストを定義して使用する
a.draw()
on_draw(GL_TRIANGLES) 関数内。
そのままで、これは正常に機能し、頂点が適切に描画され、オフセットされ、適切な色になります。
ただし、gl_Color を使用する代わりに、layout(location=1)... 行を使用して色を取得したかったのです。glVertexAttribPointer と glEnableVertexAttribArray への呼び出しが、手動で呼び出しを行っている場合に想像できる方法で色属性に対して行われた場合、私が持っているものは機能すると思いました。
への呼び出しが表示されます
glVertexAttribPointer(self.index, self.count, self.gl_type,
self.normalized, self.stride,
self.offset + pointer)
pyglet の vertexattribute.py では、「レイアウト」を何らかの形で誤用している可能性があります