我有一个迭代调度的计算着色器,并使用 2d 纹理来临时存储值。每个调用 id 访问纹理中的特定行。
问题是,这个纹理必须在每次着色器调度之前初始化为 0。
目前,我在着色器代码末尾使用了一个循环,该循环使用 imageStore() 将相应行中的所有像素重置回 0。
for (uint i = 0; i < CONSTANT_SIZE; i++)
{
imageStore( myTexture, ivec2( i, global_invocation_id ), vec4( 0, 0, 0, 0) );
}
我想知道是否有更快的方法来执行此操作,一种通过一次调用(最好是整行)设置多个像素的方法?我查看了有关图像操作的 GLSL 4.3 规范,但找不到不需要特定像素位置的规范。
如果有更快的方法在 CPU 上实现这一点,我也会对此持开放态度,我尝试使用 glTexImage2D() 重新缓冲纹理,但对于每个单独的像素使用 imageStore 并没有任何明显的性能变化。