我正在尝试使用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)函数中。
原样,这样可以正常工作,它可以正确地绘制顶点,偏移它们,并且它们具有正确的颜色。
但是,我想使用layout(location = 1)... line来获取颜色,而不是使用gl_Color。我想如果调用glVertexAttribPointer和glEnableVertexAttribArray是按照我可以想象的方式对颜色属性进行的,如果我正在手动调用那么,那么我的工作就会起作用。
我看到了对
的调用glVertexAttribPointer(self.index, self.count, self.gl_type,
self.normalized, self.stride,
self.offset + pointer)
在pyglet的vertexattribute.py中,所以也许我在某种程度上滥用“布局”