Ema*_*uel 2 synchronization opengl-es webgl
我目前正在撰写论文,主题是通过三重缓冲提高WebGL的渲染性能,或者只是避免同步.我目前正在尝试了解WebGL机器何时以及为何同步,因为在一个进程中等待另一个进程,无论是内部还是外部.
我基本上想要在WebGL/OpenGL渲染管道中找出任何潜在的瓶颈.
我还没有找到一本书或任何其他具有足够详细规格的来源.任何指示或解释?
渲染瓶颈:
着色器编译.因为WebGL可以运行移动平台,我认为行为将像Opengl ES一样,这里着色器是在第一次绘制调用时编译的.这可以通过在加载着色器时渲染一个像素来解决,以防止在进入主循环时进行编译.同样在opengl中,可以触发着色器重新编译,然后着色器内的均匀纹理会更改格式.(我认为这也值得在webgl中进行调查)
不断切换着色器或纹理单元:接近这种方法的方法是使用着色器和纹理用法对渲染进行排序,因此当您有2个着色器程序时,首先使用第一个着色器渲染eveything,然后使用第二个着色器渲染所有内容而不是在第一和第二之间不断切换.这个想法是最小化着色器使用之间的切换.
在混合状态之间切换(或不断使用混合).至少在移动设备上混合是昂贵的,所以你应该尽量减少它的使用.如果经常这样做,切换混合状态也需要时间.再次解决这个问题,您应首先渲染所有固体,然后再渲染所有需要混合的东西.
一般来说,开关状态可能很昂贵,正如第3点需要避免不断变化的状态(深度缓冲器状态/模板状态/混合状态/等).
很多抽奖电话.这里的想法是尽可能少地进行绘制调用,并避免在很多小部件中绘制几何图形(这里不要混淆,几何体的数量可以相同).要解决这个问题,您必须移动可以在一个顶点数组中合并的所有内容.因此,如果您有100个框来绘制,避免调用绘图100次,而是创建一个顶点数组,每个框都有顶点(为了性能而交换内存).如果WebGL支持实例化,那么你基本上可以做同样的事情而不会造成内存损失.