加速WebGL读取像素以进行拾取

加速WebGL读取像素以进行拾取,webgl,Webgl,我正在实现GLSL拾取,它依赖readPixels()获取单像素数据 我的第一次尝试是简单地在屏幕上绘制颜色图(1x1像素),读取像素,然后在其上绘制。 不幸的是,这导致fps从稳定的60下降到30-40 通过谷歌搜索,我发现问题是由CPU和GPU之间的同步引起的。因此,我尝试在屏幕外缓冲区中进行渲染,如下所述 但它似乎没有改变任何东西——在使用缓冲区时,我仍然从缓冲区中读取(它必须处于活动状态,readPixels才能工作) 因此,我的问题是-在屏幕外缓冲区未使用时,我是否可以以某种方式读取

我正在实现GLSL拾取,它依赖readPixels()获取单像素数据

我的第一次尝试是简单地在屏幕上绘制颜色图(1x1像素),读取像素,然后在其上绘制。 不幸的是,这导致fps从稳定的60下降到30-40

通过谷歌搜索,我发现问题是由CPU和GPU之间的同步引起的。因此,我尝试在屏幕外缓冲区中进行渲染,如下所述

但它似乎没有改变任何东西——在使用缓冲区时,我仍然从缓冲区中读取(它必须处于活动状态,readPixels才能工作)


因此,我的问题是-在屏幕外缓冲区未使用时,我是否可以以某种方式读取它?

您可能会使用多个渲染目标:

通过这种方式,您可以将当前帧缓冲区附加到颜色附件0,并在颜色附件1中附加一个额外的拾取缓冲区。在额外的缓冲区中,您可以写入拾取信息(例如,对象id)

由于所有操作(场景渲染和拾取缓冲区渲染)都是在一次过程中完成的,因此开销应该最小