当前位置: 首页 > news >正文

WebGPU学习(9)---使用Pipeline Overridable Constants

使用Pipeline Overridable Constants

WebGPU 的着色器语言是 WGSL,但与 GLSL 和 HLSL 不同,不支持 #ifdef 等宏。为了实现各种着色器变体,迄今为止,宏一直是着色器编程中非常重要的功能。那么应该如何处理没有宏的 WGSL?

WebGPU 和 WGSL 提供了一个名为“Pipeline Overridable Constants”的函数,用于从 JavaScript 端覆盖着色器常量。这种方式可以接近宏的实现了。

程序

1. 在着色器中定义可重写常量

首先,在着色器中定义一个常量。稍后可以从 JavaScript 端覆盖该常量。 这次我们在片段着色器中定义它。

override is_red: bool;
override color_r: f32 = 1.0;
override color_g: f32 = 1.0;
override color_b: f32 = 1.0;@fragment
fn main() -> @location(0) vec4<f32> {if (is_red) {return vec4<f32>(1.0, 0.0, 0.0, 1.0);} else {return vec4<f32>(color_r, color_g, color_b, 1.0);  }
}

通过在常量名称之前添加 override,该常量就成为可以从 JavaScript 端覆盖的常量。 是否指定默认值并不重要,但如果不指定,则必须始终从 JavaScript 端覆盖它。 如果不覆盖,将使用着色器端定义的默认值。

2.在JavaScript端覆盖常量

在 JavaScript 方面,为 Pipeline 的 GPUProgrammableStageconstants 属性指定一个常量值。

const pipeline = g_device.createRenderPipeline({layout: 'auto',vertex: {module: g_device.createShaderModule({code: vertWGSL,}),entryPoint: 'main',},fragment: {module: g_device.createShaderModule({code: fragWGSL,}),entryPoint: 'main',constants: {'is_red': false,'color_r': 0.5,'color_g': 0.25,'color_b': 1.0,}...

有关可以指定的常量的类型和功能的更多详细信息,请参阅WebGPU规范。

结论

通过使用 Pipeline-Overridable-Constants,我们能够覆盖着色器端的常量值。查看示例。

http://www.lryc.cn/news/152664.html

相关文章:

  • javaweb入门版学生信息管理系统-增删改查+JSP+Jstl+El
  • 云原生Kubernetes:K8S概述
  • nmap的使用
  • Python爬虫-某网酒店数据
  • 了解atoi和offsetof
  • 命令行编译VS工程
  • Linux防火墙命令
  • 大数据平台数据脱敏是什么意思?有哪些方案?
  • 前后端分离不存在会话,sessionid不一致问题
  • Python 3+ 安装及pip配置
  • StarRocks入门到熟练
  • Zabbix Api监控项值推送:zabbix_sender
  • Shell脚本开发:printf和test命令的实际应用
  • React笔记(三)类组件(1)
  • Hugging Face实战-系列教程4:padding与attention_mask
  • 睿趣科技:抖音开网店卖玩具怎么样
  • 简易虚拟培训系统-UI控件的应用4
  • #include <graphics.h> #include <conio.h> #include<stdlib.h>无法打开源文件解决方案
  • 【C语言】数据结构的基本概念与评价算法的指标
  • [PyTorch][chapter 54][Variational Auto-Encoder 实战]
  • Java实现HTTP的上传与下载
  • VPG算法
  • docker 笔记5:redis 集群分布式存储案例
  • 【Vue2】 axios库
  • 云计算 - 百度AIStudio使用小结
  • 刷新你对Redis持久化的认知
  • Greenplum-最佳实践小结
  • 从Gamma空间改为Linear空间会导致性能下降吗
  • 双轨制的发展,弊端和前景
  • 生成对抗网络(GAN):在图像生成和修复中的应用