webgl:与其他程序/着色器共享纹理

marcgfx

我有两个使用不同顶点数组和不同均匀值的着色器,但它们使用相同的纹理(spritesheet / atlas)。他们是否有可能共享相同的纹理(而不会导致纹理两次发送到GPU)?

背景:我的游戏在笔记本电脑上存在一些严重的性能问题,并且似乎与GPU相关。我当前的实现使用两个画布,一个用于背景,一个用于前景。然后,他们为最终的图像进行构图(绘制到第三个画布上)。我的背景使用4个纹理,而我的前景使用一个大的Spritesheet。前景和背景都只使用一个绘制调用。

我希望通过将所有内容绘制到一张画布上以及将所有纹理组合到一张Spritesheet中来提高性能。它绝对有可能不会导致任何改善。我的背景使用杂色来混合纹理,其主要问题很可能是着色器的复杂性。

man

是否有可能共享相同的纹理(而不会导致纹理两次发送到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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

webgl 替换程序着色器

来自分类Dev

如何在片段着色器中正确绘制其他纹理?

来自分类Dev

在着色器程序中访问深度模具纹理

来自分类Dev

GL_SHADER_STORAGE_BUFFER位置是否与其他着色器位置发生冲突?

来自分类Dev

WebGL多个着色器

来自分类Dev

WebGL着色器变量

来自分类Dev

如何将纹理数组绑定到WebGL着色器统一?

来自分类Dev

WebGL / three.js片段着色器-用alpha透明色覆盖alpha透明纹理

来自分类Dev

在使用片段着色器应用波浪效果时,防止在WebGL中出现纹理边界扭曲

来自分类Dev

如何将纹理数组绑定到WebGL着色器统一?

来自分类Dev

隧道着色器(从WebGL转换为OpenGL)-纹理坐标不匹配?

来自分类Dev

WebGL / three.js片段着色器-用alpha透明色覆盖alpha透明纹理

来自分类Dev

WebGL 着色器检查纹理 sampler2D 的状态

来自分类Dev

具有Alpha遮罩其他对象的着色器

来自分类Dev

计算着色器写入纹理

来自分类Dev

着色器产生弯曲的纹理

来自分类Dev

在OpenGL着色器中渲染纹理

来自分类Dev

片段着色器忽略纹理坐标

来自分类Dev

Unity中的多层纹理着色器

来自分类Dev

始终面对相机的着色器纹理

来自分类Dev

在OpenGL着色器中渲染纹理

来自分类Dev

片段着色器中的纹理读取

来自分类Dev

webgl着色器-分割通道RGBA

来自分类Dev

WebGL 着色器缓存可能吗?

来自分类Dev

与其他应用程序共享多个图像网址

来自分类Dev

纹理同时用作着色器程序的 FBO 颜色附件和 sampler2D

来自分类Dev

WebGL:顶点着色器转换与应用程序/软件转换之间的区别

来自分类Dev

如何在cocos2d中为共享一个着色器的精灵设置不同的纹理

来自分类Dev

在两个单独的着色器程序之间共享混合和Z缓冲区?

Related 相关文章

热门标签

归档