我在片段着色器中使用了两个SSBO。对于每个片段,我进行计算,如果满足某些条件,我将片段/像素的世界空间坐标(它们已经传递给片段着色器)写入一个SSBO,将片段颜色写入另一个SSBO。然后应用程序读取SSBO,并将那些保存在SSBO中的像素传递给下一个渲染。
中的尺寸参数
void glBufferData( GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage);
目前可以有两个值:2500
或20000
。
对于size = 2500
的通行证,一切正常。只要size = 20000
,大多数像素就会停止在SSBO中注册。
我的问题:size参数的实际含义是什么?它是每个片段实例中可以写入的大小(在这种情况下,每个片段每个SSBO只有一个vec4
),或者它是每个渲染过程中所有实例的大小(在这种情况下)每个SSBO 2500或20000 vec4
?
答案 0 :(得分:0)
我认为您的SSBO包含vec4
。
它们的大小是它们的总大小是一帧的字节(如Reto Koradi所说),你每次用glBufferData
重置它。 vec4
是16个字节(每个float
4个字节,它们是32位)。所以2500的大小意味着2500/16 = 156(.25)vec4s。 20000字节是1250 vec4s
。