用于颜色属性的Pyglet,着色器和GLSL布局标记

时间:2013-04-14 20:00:26

标签: python opengl python-3.x glsl pyglet

我正在尝试使用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中,所以也许我在某种程度上滥用“布局”

0 个答案:

没有答案