簡體   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