99次发布

0.45.0 2024年3月21日
0.44.0 2023年12月3日
0.43.0 2023年6月2日
0.39.0 2023年3月26日
0.0.11 2019年10月28日

#53 in WebAssembly

Download history 255/week @ 2024-04-03 182/week @ 2024-04-10 132/week @ 2024-04-17 28/week @ 2024-04-24 337/week @ 2024-05-01 1498/week @ 2024-05-08 317/week @ 2024-05-15 151/week @ 2024-05-22 301/week @ 2024-05-29 221/week @ 2024-06-05 679/week @ 2024-06-12 410/week @ 2024-06-19 258/week @ 2024-06-26 599/week @ 2024-07-03 394/week @ 2024-07-10 57/week @ 2024-07-17

1,374 每月下载次数
用于 dominator_helpers

MIT/Apache

375KB
8K SLoC

Build Status LICENSE LICENSE Crates.io Documentation Demo

DEMO

关于

awsm_web主要用作awsm生态系统内其他crates的构建模块。

描述

该库的方法在精神上与gloo类似,也就是说,它连接了自动生成的WebIDL驱动的web-sys提供的绑定和我们在Web应用中通常考虑的真正的起点之间的差距。

特性

特性被严格限制以保持依赖项最小。默认情况下,不启用任何特性,但all特性将全部启用(除了一些仅用于调试的特性,如debug_log)。

WebGL

缓存

目标是保持它非常低级和低成本的抽象,几乎是通用的。然而,“几乎是通用的”并非没有观点。例如,webgl包装器为所有字符串查找(包括ubo偏移量和纹理采样器)提供了一种懒惰的缓存机制,并将本地状态存储起来以避免进行不必要的gl调用。

关于是否使用字符串或预先计算好的整数

  1. uniforms:你无法提前知道这些,你必须通过一个接受字符串的Web API调用来获取它们
  2. uniform buffer objects:你可以预先设置和计算它,但它非常容易出错且脆弱
  3. sampler index:可以预先设置,但需要与uniform值同步
  4. attributes:可以预先设置,无论是通过着色器代码还是Web API

因此,对于除了属性之外的所有事情,最好在所有地方都使用字符串 - 在第一次调用之后,它仅是一个本地缓存查找。

注意,还有一个全局注册表,用于在着色器代码之前指定ubo和属性的位置

API

它发生在几个级别上

第一级是对原生web_sys类型的非常薄的包装,作为扩展特性添加到上下文中(既适用于webgl1也适用于2)。这些可以直接用于上下文,并以前缀awsm_*开头。在这个级别,不维护任何额外的状态。

然后,WebGlRenderer 包装器(也适用于 1 和 2)包含上述提到的所有状态和缓存内容。为了便于使用,许多可以直接在上下文中调用的函数都在渲染器上重新导出,而不带 awsm_ 前缀。

依赖项

~6.5–9MB
~176K SLoC