GLSL 3.30之前的属性分配
GLSL pre 3.30 attribute allocation
我正在为一台我目前无法访问的计算机编写代码,因此在一台更现代的笔记本电脑上进行测试。
将顶点和颜色信息(在交错数组中)传递给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;
}
fragment shader is
void main(){
gl_FragColor=gl_Color;
}
绘制了正确的形状,但没有颜色-试图尽可能使用"旧"版本的GLSL以确保向后兼容。
那么我如何在着色器中拾取颜色信息(我也传递正常信息)
您正在将固定函数顶点属性与通用顶点属性混合。
顶点着色器中的gl_Position
和gl_Color
属性对应于固定函数属性。另一方面,glVertexAttribPointer()
和glEnableVertexAttribArray()
调用是针对一般顶点属性的。在某些平台上混合使用这两种方法是可行的,但这并不是一种安全可靠的方法。
您需要更改其中一个:
- 在顶点着色器中使用通用属性。您可以通过声明自己的变量来实现这一点,而不是使用
- 使用调用来设置固定函数顶点属性,而不是
glVertexAttribPointer()
和glEnableVertexAttribArray()
:glVertexPointer()
,glColorPointer()
和glEnableClientState()
。
gl_Position
和gl_Color
。您声明的变量在较旧的GL版本中具有attribute
限定符,或者在当前的核心概要文件中具有in
限定符。你还需要将这些变量与属性位置关联起来,如果你至少使用GL 3.3,可以在着色器代码中使用layout(location = ..)
限定符,或者在链接着色器之前调用glBindAttribLocation()
。相关文章:
- 将数组的地址分配给变量并删除
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 如何通过一个循环将多个文件的内容分配给不同的类属性?
- 属性分配无效:"displayText"是文本字段 qml 中的只读属性
- 动态分配的属性和继承
- 使用 switch 语句将不同的函数作为类属性分配 C++
- 从多属性<< C,B> 分配变体A,B,C>?
- 分配以下对象属性在哪里
- 将成员函数分配给实例成员的属性
- 使用 QAbstractListModel 分配 QML 布尔属性失败
- QML 无法分配给不存在的属性
- 在运行时分配已发布属性的确切时间?
- 为什么我不能分配此QT属性
- boost :: Spirit属性分配:struct is_nullary:基本类型无法成为结构或类型
- 如何避免为未使用的属性分配内存
- c++中对象属性的内存分配
- Qt - 无法分配给不存在的属性(自定义C++类)
- QML 无法将分配shared_ptr分配给<Track> [未知属性类型]
- 如何使具有常量属性的类可分配
- GLSL 3.30之前的属性分配