WebGL2系列之不可变纹理

简介: WebGL2系列之不可变纹理

纹理背景知识


在WebGL1中,纹理包括2D纹理和立方体纹理,在实际的使用中,如果纹理的图片是宽和高是2的幂,可以自动生成纹理的mipmap。


除此之外,还可以通过gl.texImage2D函数独立指定纹理的每个mipmap的级别。


因此,这会导致一个一般的编程人员不易觉察的问题,这涉及到显卡底层驱动。


简单来说,就是会导致驱动程序无法在绘图之前确定纹理是否完全指定,因此它必须检查每一个mip贴图级别或者子图像的格式是否相符、每一个级别的大小是否正确以及是否有足够的内存。这种绘图时检查可能代价很高,而使用不可变纹理可以避免这种情形。


不可变纹理


使用不可变纹理,可以减少上文中提到的因检查而导致的性能开销。 不可变纹理指的是纹理的一种分配方式,而不是值纹理的内容。


不可变纹理的思路是:在给纹理加载纹理数据之前,先指定纹理的格式和大小,显卡驱动程序可以提前进行一致性、内存的检查,一旦指定了纹理的格式和大小之后,纹理的格式和尺寸就不能更改,但是可以通过gl.texSubImage2D、texSubImage3D(注意不能用gl.txtImage2D)等方法来加载纹理的数据,同时还可以使用such as render-to-texture, mipmap generation等方式加载纹理数据。


texSubImage3D(以及后面提到的texStorage3D)方法与3D纹理有关,后续相关文章会介绍。


创建不可变纹理


创建不可变纹理很简单,首先通过gl.bindTexture方法绑定纹理对象,然后通过调用gl. texStorage2D、texStorage3D指定纹理的大小和格式,来创建不可变的存储空间。代码如下:


// -- Allocate storage for the texture
 gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGB8, 512, 512);
 gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB, gl.UNSIGNED_BYTE, image);
 gl.generateMipmap(gl.TEXTURE_2D);


不可变纹理可以优化性能


在很多情况下,我们的纹理的尺寸和数据格式都是不需要改变的。使用不可变纹理,可以避免驱动程序对这些不需要改变的尺寸和数据格式的纹理对象进行一致性和内存大小的检查,因此可以获得更佳的性能。


案例:使用不可变纹理


暂无

后记


本节只讲述了2D的不可变纹理,3D的不可变纹理类似,在将3D纹理的时候会进一步讲述。

相关文章
|
监控 安全 数据可视化
java基于微服务的智慧工地管理云平台SaaS源码 数据大屏端 APP移动端
围绕施工现场人、机、料、法、环、各个环节,“智慧工地”将传统建筑施工与大数据物联网无缝结合集成多个智慧应用子系统,施工数据云端整合分析,提供专业、先进、安全的智慧工地解决方案。
287 1
|
机器学习/深度学习 人工智能 搜索推荐
AIGC工具——文心一格
【1月更文挑战第12天】AIGC工具——文心一格
963 3
AIGC工具——文心一格
|
11月前
|
JSON 监控 JavaScript
Node.js-API 限流与日志优化
Node.js-API 限流与日志优化
|
JavaScript 数据安全/隐私保护 索引
node.js 命令行交互工具(最新版) inquirer.js 实用教程
node.js 命令行交互工具(最新版) inquirer.js 实用教程
339 0
|
移动开发 HTML5
详解 HTML5 服务器发送事件(Server-Sent Events)
详解 HTML5 服务器发送事件(Server-Sent Events)
316 0
|
存储 JSON C#
Unity 数据读取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)
Unity 数据读取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)
|
Web App开发 JavaScript 测试技术
webrtc学习: 部署stun和turn服务器
webrtc的P2P穿透部分是由libjingle实现的.  步骤顺序大概是这样的:  1. 尝试直连. 2. 通过stun服务器进行穿透 3. 无法穿透则通过turn服务器中转.    stun 服务器比较简单.
9519 1
|
编解码 JSON 数据可视化
EO Browser——在线卫星影像查看最全影像和下载,可编程的影像云平台
EO Browser——在线卫星影像查看最全影像和下载,可编程的影像云平台
1628 0
EO Browser——在线卫星影像查看最全影像和下载,可编程的影像云平台
|
新零售 监控 算法
又一创新!阿里云 Serverless 调度论文被云计算顶会 ACM SoCC 收录
阿里云 Serverless 函数计算不断突破:发布基于函数画像的调度算法论文,在提升资源利用率的同时达到性能高稳定性。
756 0
又一创新!阿里云 Serverless 调度论文被云计算顶会 ACM SoCC 收录
|
安全 Java Spring
SpringBoot整合Spring Security,使用Session方式的验证码(六)
这里用到了一个常量类,到时候做验证码判断时用的比较多:
317 0