一种使用 esbuild 在 Typescript 文件中加载 .wglsl 文件的方法?

A way to load .wglsl files in Typescript files using esbuild?

我正在使用 esbuild 作为捆绑我的 Typescript 代码的工具,但我找不到为“.wgsl”文件配置加载器的方法。

米app.ts 文件:

import shader from './shader.wgsl';
//webgpu logic

我的 shader.d.ts :

declare module '*.wgsl'{
  const value: string;
  export default value;
}

我的 esbuild 文件(如你所见,我无法使用 ts-shader-loader):

import { build } from "esbuild";
import * as ShaderLoader from "ts-shader-loader";

build({
    entryPoints: ['./src/app.ts'],
    bundle: true,
    sourcemap : true,
    target : 'es2015',
    format:'esm',
    minify : true,
    outfile: './dist/js/app.js',
    tsconfig: './tsconfig.json'
    plugins: [ShaderLoader]
}).catch(() => process.exit(1));

你想要像 esbuild-plugin-glsl 这样的东西(它是 esbuild 的 GLSL 导入插件,而 ts-shader-loader 的导入插件webpack).

我们使用 Vite 导入 WGSL 和其他资产。
例如通过在路径中添加 '?raw',Vite 将为您完成这项工作。

import shader from './shaders/xxx.wgsl?raw'

Vite也可以简单的导入wasm、worker、url,你可以查看:https://vitejs.dev/guide/assets.html#importing-asset-as-url

我们还建立了一个基于Vite的项目,为WebGPU新手分享基础示例 https://github.com/Orillusion/orillusion-webgpu-samples
欢迎更多演示

我不得不为 esbuild-plugin-glsl 做出贡献,以允许其他用户加载 .wgsl 文件。这是我的 esbuild 文件。使用版本 1.1.0^

import { build } from "esbuild";
import { glsl } from "esbuild-plugin-glsl";

build({
    entryPoints: ['./src/app.ts'],
    bundle: true,
    sourcemap : true,
    target : 'es2015',
    format:'esm',
    minify : true,
    outfile: './dist/js/app.js',
    tsconfig: './tsconfig.json',
    plugins: [
        glsl({
            minify: true,
        })
    ]
  }).catch(() => process.exit(1));

d.ts 文件应该有这个:

declare module '*.wgsl'{
    const value: string;
    export default value;
}

导入着色器的方法是:

//This file has the Fragment and Vertex Shader Code.
import shader from './shader.wgsl';