从 Next.js 加载着色器

load shaders from next.js

提问人:Th0rgal 提问时间:3/12/2022 最后编辑:juliomalvesTh0rgal 更新时间:3/12/2022 访问量:1192

问:

我正在将 next.js 用于我的 Web 应用程序。我使用 WebGL 渲染 2D 场景。我有一个片段和一个顶点着色器,在我的 javascript 中硬编码为字符串:

var fragmentShaderSource = [
    `  #ifdef GL_ES`,
    `precision highp float;`,
    `  #endif`,
    ``,
    `uniform vec4 uGlobalColor;`,
    ``,
    `void main() {`,
    `  gl_FragColor = uGlobalColor;`,
    `}`,
].join("\n");

...

let shader = gl.createShader(type);

gl.shaderSource(shader, fragmentShaderSource);
gl.compileShader(shader);

这很糟糕,我更愿意使用单独的 fragment.glsl 和 vertex.glsl 文件进行开发(即使编译版本在最后获得硬编码字符串)。我读过关于 webpack 的东西,但这是我第一次使用 next/webpack,我不确定该怎么做(例子是 6 岁或更长时间)。

JavaScript Next.js 着色器 WebGL

评论

0赞 Ramakay 3/12/2022
你得到的实际错误是什么 - 你对使用加载器有什么了解吗?
0赞 merryweather 3/12/2022
为什么不把它们放在你的公共文件夹中,并根据需要加载它们呢?

答:

5赞 Th0rgal 3/12/2022 #1

这是使用原始加载器的解决方案。这是我的next.config.js:

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  webpack: (config, options) => {
    config.module.rules.push({
      test: /\.glsl/,
      type: "asset/source",
    })
    return config
  },
}

module.exports = nextConfig

我现在可以以这种方式导入我的着色器代码:

import fragmentShader from '../../shaders/fragment.glsl'
import vertexShader from '../../shaders/vertex.glsl'