opengl - GLSL 统一块中的静态数组
问题描述
我有一个带有这个统一块的 GLSL 计算着色器:
#define MAX_OCTAVE_COUNT 8
layout(std140) uniform Parameters {
float time;
int octaveCount, octaveSize, executionCount;
float octaveWeight[MAX_OCTAVE_COUNT];
int chunkSize;
} params;
我将这个结构(D语言)传递给它:
struct GenParams {
GLfloat time;
GLint octaveCount, octaveSize, executionCount;
GLfloat[MAX_OCTAVE_COUNT] octaveWeight;
GLint chunkSize;
}
但是,对于octaveWeight[x]
where x > 0
,数据没有被传递(x = 0
是的)。当我将浮动的静态数组更改为两个vec4
(仅在着色器端)时,它可以工作。
这里有什么问题?
解决方案
如果成员是标量或向量数组,则根据规则 (1)、(2) 和 (3) 设置基本对齐方式和数组跨度以匹配单个数组元素的基本对齐方式,并向上舍入为vec4 的基本对齐方式。数组末尾可能有填充;数组后面的成员的基本偏移量向上舍入到基本对齐的下一个倍数。
所以数组中的浮点数被四舍五入到 vec4 大小。
推荐阅读
- javascript - 不确定我在二进制搜索中做错了什么
- git - Heroku 如何只允许我的 git 帐户推送到其创建的 git 遥控器?
- sql-server - 用户登录失败(使用可信连接 EF Core)如何创建缺少的数据库?
- r - 安装github的问题
- html - Django 显示数据 leftleft
- javascript - 如何使用来自 Ajax 响应的日期对数组数据进行分组?
- python - 合并 csv 文件并添加标题行 - 垂直
- javascript - 视口中的背景图像显示
- java - 如何在 Java 中使用拆分字符串和数组获取最年长的人的姓名
- c - 有人可以用最简单的方式向我解释 snprintf 的工作原理吗?