我正在为我目前无法访问的计算机编写代码,以便在更现代的笔记本电脑上进行测试。
将顶点和颜色信息(在交错数组中)传递给我正在使用的GPU
glBindBuffer (GL_ARRAY_BUFFER, VertexVBoid);
glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, sizeof(c_vertex), BUFFER_OFFSET(0));
glVertexAttribPointer (1, 3, GL_FLOAT, GL_FALSE, sizeof(c_vertex), BUFFER_OFFSET(3*sizeof(vertex_store[0][0].x)));
glEnableVertexAttribArray (0);
glEnableVertexAttribArray (1);
顶点着色器是
void main()
{
gl_Position = ftransform();
gl_FrontColor = gl_Color;
}
片段着色器
void main(){
gl_FragColor=gl_Color;
}
绘制正确的形状但没有颜色 - 尝试尽可能使用“旧”版本的GLSL以确保向后兼容性。
那么如何在着色器中拾取颜色信息(我也传递正常信息)
答案 0 :(得分:1)
您正在将固定函数顶点属性与通用顶点属性混合。
顶点着色器中的gl_Position
和gl_Color
属性对应于固定的函数属性。另一方面,glVertexAttribPointer()
和glEnableVertexAttribArray()
调用用于通用顶点属性。在某些平台上混合使用这两个作品,但这不是一个安全可靠的事情。
您需要更改其中一个:
gl_Position
和gl_Color
。您声明的变量在较旧的GL版本中具有attribute
限定符,或者在当前核心配置文件中具有in
限定符。您还需要将这些变量与属性位置相关联,如果您在使用至少GL 3.3时可以使用着色器代码中的layout(location = ..)
限定符,或者在链接之前调用glBindAttribLocation()
着色器。glVertexAttribPointer()
和glEnableVertexAttribArray()
:glVertexPointer()
,glColorPointer()
和glEnableClientState()
。