我有一个现有的OpenGL ES 3.1应用程序,该应用程序使用颜色和深度/模板附件将场景渲染到FBO。它使用通常的绘制方法(glBindBuffer,glDrawArrays,glBlend *,glStencil *等)。现在,我的任务是创建仅深度通道,以与主通道相同的值填充深度附件。
我的问题是:要实现这一目标并避免GPU做多余的工作(不必要的着色器调用等),最少需要执行多少步骤?是否足以停用颜色附件,还是我还必须设置空着色器,禁用混合等?
答案 0 :(得分:0)
我认为在主通行证运行之前您需要这样做,否则您只需保留主通行证深度即可。
预照
渲染
选项
在上面的步骤(2)中,加载仅深度遍的深度结果作为主遍的起始深度可能是有益的。这将为您提供更好的早zs测试精度,但以回读深度值为代价。大多数移动GPU都具有隐藏的表面去除功能,因此这并不总是净收益-它取决于您的内容,目标GPU以及前后绘制顺序的好坏。
您可能想将专用缓冲区(位置数据在一个缓冲区中交织,非位置在一秒钟中交织)用于主绘图,因为如果剔除原语,许多GPU会优化非位置计算。
专用缓冲区和优化的着色器也可以用于阴影映射以及其他此类仅深度的技术。