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