我们将PIXI.js用于内部使用WebGL进行渲染的游戏。我偶尔会遇到两种力量的提及,以及避免NPOT纹理可能带来的性能优势(sockets can be retrieved,https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL#Non_power-of-two_textures)。令人困惑的是,还有人提到它不再有所作为(https://github.com/pixijs/pixi.js/blob/master/src/core/textures/BaseTexture.js#L116)。随着webgl和浏览器开发的进展如此之快,很难分辨出哪些信息是准确的。
具体来说,我想知道填充图像以创建POT纹理(更长的下载量,增加的内存使用量)的开销是否值得获得性能优势(如果确实存在)。我无法找到比较POT和NPOT纹理的任何比较或性能基准,我很遗憾不知道如何自己创建一个。
有没有人有这方面的经验或一些最新的数字?有没有一种衡量webgl性能的好方法?
答案 0 :(得分:1)
我认为你要获得的大多数答案都是“取决于硬件/驱动程序/ gpu”,“你必须自己测试”或“它不会慢得多(但需要注意的是你必须测试所有gpus确保)“。
不要担心将图像填充到POT,而应该使用纹理别名(精灵表)。或者请Pixi背后的人来实现它。通过使用具有POT尺寸的纹理别名,您可以获得两全其美:最小填充浪费,保证POT纹理将比NPOT纹理执行不慢, AND 减少了GL状态的变化。
我无法强调通过减少GL状态变化可以获得多大的改进。通过实现纹理锯齿和绘制批处理,我基本上可以在真实设置中绘制尽可能多的2D精灵;这是〜150k移动,旋转和调整精度60fps(由CPU绑定每帧每个精灵的新变换)