前言
@luma.gl
是一个 Web GPU 编程框架,提供了一系列 Web GPU 编程接口和工具,使得 Web GPU 编程变得更加容易、高效。
@luma.gl/experimental
是 @luma.gl
的一个实验性扩展包,提供了一些新特性和实验性功能,包括基于 Web Workers 的并行计算、更高效的着色器加载和解析等。
本教程将介绍 @luma.gl/experimental
的基本用法和一些实例应用,让你了解如何利用该扩展包开展你的 Web GPU 开发工作。
安装
使用 npm
进行安装:
--- ------- ---------------------
安装完成后,即可在你的代码中引入该包:
------ - -- ---- ---- ------------------------
Web Worker 并行计算
@luma.gl/experimental
提供了一套基于 Web Workers 的并行计算框架,可以帮助你快速开发并行计算应用。
通过 luma.WebWorkerOffscreen
组件,你可以创建一个与主线程中的 luma
对象相对应的独立 Web Worker,然后在 Web Worker 中使用 luma
对象提供的接口进行计算。
以下示例展示了如何使用 Web Worker 进行并行加法计算:
------ -------------------- ---- ------------------------ ----- --------- - --- -------------------- --------------------------------------------------------- ----- ------- - ----- --------- - --- -- - ----- ------ --- --- - -- ----- ------ - ------------ --- -------------------- -- --- ----- - - -- ----- - - -- ------------------ -- -- ---------------- -- - -------------------- -- -- - ---
在上面的示例中,我们首先创建了一个 WebWorkerOffscreen
对象,并传入一个定义在 Web Worker 中的 JS 代码。在 Web Worker 中,我们引入了 @luma.gl/experimental
,并使用了其中的 utils.add
方法进行加法计算。
接着我们在主线程中通过 webWorker.invoke
方法调用 Web Worker 中定义的计算逻辑,并传入参数 a
和 b
。计算完成后,invoke
方法将会返回 Web Worker 中 postMessage
返回的结果,即加法计算结果。
在实际应用中,我们可以使用该框架来开发各种密集型计算应用,例如机器学习、数据处理等。
高效着色器加载和解析
@luma.gl/experimental
提供了一些高效渲染使用的接口,其中包括着色器加载和解析功能。
通过 luma.shaderModules
模块,我们可以创建各种自定义着色器,例如下面这个基于 Perlin 噪声的水流效果着色器:
------ --------- ---- ----------------------- ------ ----- --------- - --------------------- - --- - --------- ---- ---------- ------- ----- ------ ---- ------ - ----------- - --------------- ---- ----- - -- --- - ------- -- --------------------------------- ------- ------ -------------------------------- ------- ---- -------------- ------- ---- ------------ ------- ----- ------ ------- ---- ---------- ---- ----------- -- - ---- --- - - - ------ --- - ----- --- - --------- - ---- - ------- - ------ --- - --------- - ---- - ------- - ------ --- - --------- - ---- - ------- - ----- -- ------ ---- - ---- ----------- -- - ---- --- - - - ------ --- - ----- --- - --------- - ---- - ------- - ------ --- - --------- - ---- - ------- - ------ --- - --------- - ---- - ------- - ------ --- - --------- - ---- - ------- - ----- -- ------ ---- - ---- ------------ -- - ------ ------------------------- - ---- --------- -- - ------ ---------------------------- - ----- ----------- -- - ---- --- - --------- ---- --- - --- - ---------- --- - ------------ --- - ------------ ---- --- - --------- ---- --- - --- - ---------- ---- -- - ----------- ------ ------ ------- ---- -- - ------------ -------- ---- --- - --------- ---- --- - --------- ---- --- - ------------------- - ---- ---- ---- - ----------- - ----- ---- ---- - ----------- - ----- ---- --- - ---- - ---- - ----- ---- --- - ---------------- - ---- - ----- - ---- --- - ----------- ---- --- - --------- - -------- - --------- ---- --- - --------- ----------- --- -- --- - ---------- ---- - ----- --- -- --- - ---------- ---- - ----- ---- --- - ---- - ---- - ----- ---- --- - ---------------- - ---- - ----- - ---- --- - ----------- ---- --- - --------- - -------- - --------- ---- --- - --------- ----------- --- -- --- - ---------- ---- - ----- --- -- --- - ---------- ---- - ----- ---- ---- - ------------------------ ---- ---- - ------------------------ ---- ---- - ------------------------ ---- ---- - ------------------------ ---- ---- - ------------------------ ---- ---- - ------------------------ ---- ---- - ------------------------ ---- ---- - ------------------------ ---- ----- - -------------- ------ --------- ------ --------- ------ --------- ------- ---- ----- - -------------- ------ --------- ------ --------- ------ --------- ------- ---- ----- - ------------------------------------------------- ----- - -------------------------------------- ----- - ---------------------------------- ---- ---- - ------------------------------------------------------- ---- --- - ----- - ----- ---- --- - ----- - ----- ---- ---- - --- - --- - ------ ---- ---- - --------- - -------- - --------------------------------------------------- ---- ---- - --------- - --------- - -------- - --------------------------------------------------------------- ---- ---- - -------- --- - ------------------ --------------- ---- ---- - --------- - ------------------------------ ---- -- - ----------- - ---------------------- ---- -- - -- - ---------- ---- - ------------ ---- ----- ------ - ------ - ------ - ---- - --- - -------- ------ - ------ - ------ - ---- - --- - -------- ------ - ------ - ------ - ---- - --- - -------- ------ - ------ - ------ - ---- - --- - -------- ---- --------- - ---------------------------------- ---- --------- - ---------------------------------- ---- --- - ----- - ------------------------ ---- --- - ------------------------ ---- ---- - -------------------------- ---- ---- - ---------------------- ---- --- - --- - --------- - --- - ---------- ---- --- - --- - --------- - --- - ---------- ---- --- - --- - --------- - --- - ---------- ---- --- - --- - --------- - --- - ---------- ---- ----- - ---------------------------- ------------- ------------- --------------- ---- ----- - --------------------- ---- ----- - ---------------------------------- ---- ---- - ------------------------ -------------------- ---- ---- - ------------------------ -------------------- ---- ---- - --------- --------- ----- ---- ----- - --------------------------------------------------- ---- ---- - --------- - ------ ---- ---- - --------- - ------ ----- ----- - ----------------- ---- ----- - --------------------------------- - ---------------------------------- ---- ---- - ---------- - ------------ - ------------ - -------- -------- -- -------------------------------------------------- ------ -- ---------------------- ------ -- ---------------------- ------ -- ---------------------- ------ -- ---------------------- ---- ---- - ------------------------------------------------- ------- -- ------------------------------------------------- ---- ----- - ------ - ------ - -------- - --------- ----- ----- - ------------------------- ---- ---- - ----------------------------------------------------- ---- ---- - ------------------------ -------------------- ---- ---- - ---------------------------------------------------------------------------------- ---- -- - ---------------------------------- ------- -- -------- ---- -- - --------------------- - ------------------------------ ---- -- - --------------------- - ------------------------------ ---- ----- - ----------------------- - ------------------------------ ---- ----- - ------------------------- - ------------------------------ ---- ----- - --------------------- - ------------------------------ ---- ----- - ------------------------- - ------------------------------ ---- -- - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---- -- - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---- -- - ----------------------------- - ------------------------- ---- -- - ----------------------------- - ------------------------- ---- ------- - ------------------- -- - ----------------------------- - ------------------------- -- - ----------------------------- - ------------------------- ---- ------- - ------------------- -- - ----------------------------- - ------------------------- -- - ----------------------------- - ------------------------- ---- ------- - ------------------- -- - ----------------------------- - ------------------------- -- - ----------------------------- - ------------------------- ---- ------- - ------------------- ---- -- - ------------------------------------------------------------------------------ ---------- -----------------------------------------------------------------------------------------------------------------------------