[英]Please tell VertexShader Error Solution
使用OpenGL的学生。 不会说英语。 所以请理解。
目前存在一个问题
#version 400
layout (location = 0) in vec3 VertexPosition;
layout (location = 1) in vec3 VertexNormal;
layout (location = 2) in mat4 instance_ModelMatrix [3];
VertexShader代码。 上面的代码,但它运行
layout (location = 2) in mat4 instance_ModelMatrix [3];
- >
layout (location = 2) in mat4 instance_ModelMatrix [4];
随着这种变化的运行
属性instance_ModelMatrix是一个矩阵或数组,没有空间将其插入绑定的通用属性通道。 出于资源错误。
这会带来错误。
有什么方法我想使用目前超过60的安排
谢谢你看看这个问题
最大属性数由GL_MAX_VERTEX_ATTRIBS
确定,这对于每个实现都不同但必须至少为16(因此它应该工作......?)。 您可以使用glGetIntegerv()
获取值:
int maxVertexAttribs;
glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
由于每个mat4
计为四个属性,并且每个vec3
计为一个,因此以下代码使用14个属性:
#version 400
layout (location = 0) in vec3 VertexPosition;
layout (location = 1) in vec3 VertexNormal;
layout (location = 2) in mat4 instance_ModelMatrix [3];
在此代码中, instance_ModelMatrix
实际上将使用位置2到13.当您更改数组大小时:
#version 400
layout (location = 0) in vec3 VertexPosition;
layout (location = 1) in vec3 VertexNormal;
layout (location = 2) in mat4 instance_ModelMatrix [4];
这使用18个顶点属性,在插槽2到17中使用instance_ModelMatrix
。我的猜测是系统上的顶点属性的最大数量是16,所以这不适合。
如果要使用大量的每个实例数据,则必须使用制服,统一缓冲区对象或缓冲区纹理。 统一缓冲区对象可能适合您的应用程序。 然后,您可以使用gl_InstanceID
作为实例数据的索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.