繁体   English   中英

请告诉VertexShader错误解决方案

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM