在我的着色器中,我有一个包含结构数组的ssbo。
layout(std430, binding = 14) readonly buffer Block {
Uniform uniform[];
};
现在,我想使用glDrawArraysIndirect,并且需要使用每个draw命令传递ssbo的索引。
我正在使用opengl 4.5版,并且不支持扩展名ARB_shader_draw参数。
另外的问题是我使用的是三重缓冲区,因此我需要将缓冲区当前部分的偏移量添加到索引中,并且绘制命令不一定与缓冲区中的结构顺序相同是。
如果没有办法以不同的顺序处理绘图命令,则可以对其重新排序,但如果可能的话,我会避免这种情况。
答案 0 :(得分:1)
如果有一种简单的方法可以解决ARB_shader_draw_parameters的功能...该功能就不需要存在。
与ARB_shader_draw_parameters最接近的近似值是在draw indirect命令中使用基本实例索引。您生成的每个绘图都将为其分配一个基本实例,该索引代表用于索引数组的索引。
当然,ARB_shader_draw_parameters还提供对gl_BaseInstanceARB
值的访问,该值是draw命令中的基本实例字段。之所以提供此功能,是因为gl_InstanceID
不受基本实例的影响。基本实例将仅影响从vertex shader instanced arrays获取的值。
因此,要使用基本实例,您必须有一个实例数组,该数组只是线性增加的整数系列。该值将是您需要的基础实例索引。
并且由于您无法使用gl_DrawIDARB
,因此无法保证将此类基本实例值设置为dynamically uniform。因此,除其他事项外,您不能使用索引或其衍生的任何表达式来执行以下操作: