一位开发者花了两年半时间,做了一个叫 pngine 的项目。它用 S 表达式(S-expressions)来描述 WebGPU 的管线、缓冲区和渲染流程,让 GPU 编程的“接线”部分变成可读、可验证、可复用的数据。
在 pngine 的示例代码里,一个红色三角形的渲染只需要几段声明式描述:shader-module 定义 WGSL 着色器代码,render-pipeline 描述渲染管线,render-pass 定义渲染通道,最后用 frame 组织执行顺序。这些 S 表达式与 WebGPU 规范一一对应,没有额外封装。
![]()
三个核心能力
pngine 提供三个主要能力。最值得关注的是它的二进制编译能力——这也是项目名称里 “png” 的由来:S 表达式会被编译成二进制表示,由一个小型运行时解释执行。这个运行时和载荷可以放进 PNG 的额外 chunk 中,而 PNG 本身仍然是预览图,展示你正在发布的内容。
这种设计解决了一个实际问题:分享自定义 WebGPU 接线一直是个难题。开发者希望有一个单一文件,能描述所有 WebGPU 管线、缓冲区、渲染通道,以及着色器模块和 WGSL 代码。
程序即数据
用通用语言写 WebGPU 当然可以,但开发者想要更高层的抽象,没有干扰,能作为其他工具的基础,并提供更深入的洞察——无论是给人还是给机器。
SJON 提供了构建 DSL 的方式,可以自动验证,并通过 S 表达式以一致、可组合的方式交付。这仅用于 WebGPU 的接线部分,不涉及着色器代码——WGSL 被视为独立的 DSL,保持原样,不做扩展。
这个想法的核心在于:程序表示本身就是可读的数据。当程序表示是普通的结构化数据时,就可以自动进行验证、回放、检查、压缩、序列化和机器生成,所有能力都基于同一份表示。
项目代码采用 CC0 许可,托管在 GitHub 上,发布版本从开发者自托管的仓库中切割。如果你也在为 WebGPU 的管线分享而头疼,这个项目值得一看。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.