我有两个使用不同顶点数组和不同均匀值的着色器,但它们使用相同的纹理(spritesheet / atlas)。他们是否有可能共享相同的纹理(而不会导致纹理两次发送到GPU)?
背景:我的游戏在笔记本电脑上存在一些严重的性能问题,并且似乎与GPU相关。我当前的实现使用两个画布,一个用于背景,一个用于前景。然后,他们为最终的图像进行构图(绘制到第三个画布上)。我的背景使用4个纹理,而我的前景使用一个大的Spritesheet。前景和背景都只使用一个绘制调用。
我希望通过将所有内容绘制到一张画布上以及将所有纹理组合到一张Spritesheet中来提高性能。它绝对有可能不会导致任何改善。我的背景使用杂色来混合纹理,其主要问题很可能是着色器的复杂性。
是否有可能共享相同的纹理(而不会导致纹理两次发送到GPU
是的
仅在调用gl.texImage2D
或时将纹理的图像发送到GPU gl.texSubImage2D
。
设置WebGL程序的最常见形式是
在初始化时间
在渲染时间
对于纹理,“在初始化时间部分”通常意味着调用
gl.createTexture // to create a teture
gl.bindTexture // to assign the texture so follow commands will affect it.
gl.texImage2D // to upload data
gl.texParameteri // to set filtering
gl.generateMipmap // if you need mips
在运行时
gl.activeTexture // to choose a texture unit
gl.bindTexture // to assign an existing texture to the active texture unit
gl.uniform1i // to tell the shader which unit to use for a specific sampler
就将纹理组合成纹理图集而言,是的,这可能会使程序运行得更快。这不是因为您上传的纹理更少,而是因为您可以通过更少的绘制调用来绘制更多的东西。请参阅本文底部附近的多维数据集示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句