我在一个片段着色器中使用了两个SSBO。对于每个片段,我进行计算,如果满足某些条件,则将片段/像素的世界空间坐标(它们已传递到片段着色器)写入一个SSBO,并将片段颜色写入另一个SSBO。然后,应用程序读取SSBO,并将保存在SSBO中的那些像素传递给下一次渲染。
中的size参数
void glBufferData( GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage); 当前可以有两个值:2500或20000。
对于size = 2500所在的passes,一切工作正常。一旦size = 20000,那么大多数像素就会停止在SSBO中注册。
我的问题是: size参数的实际含义是什么?它是可以在每个片段实例化中写入的内容的大小(在这种情况下,每个片段只有一个vec4 ),还是每个呈现过程中所有实例化的大小(在本例中,每个SSBO有2,500或20000个vec4 )?
发布于 2016-10-31 07:47:46
我认为您的SSBO包含一个vec4。他们的大小是他们的总大小是字节(就像雷托科拉迪说的),对于一帧,如果你每次用glBufferData重置它。vec4是16个字节(每个float 4个字节,它们是32位)。因此,大小为2500意味着2500/16 = 156(.25) vec4s。20000字节是1250 vec4s。
https://stackoverflow.com/questions/40324019
复制相似问题