惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
Google DeepMind News
Google DeepMind News
博客园 - 【当耐特】
量子位
博客园 - 司徒正美
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
Jina AI
Jina AI
J
Java Code Geeks
腾讯CDC
大猫的无限游戏
大猫的无限游戏
V
Visual Studio Blog
I
InfoQ
D
Docker
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
宝玉的分享
宝玉的分享
G
Google Developers Blog
GbyAI
GbyAI
Y
Y Combinator Blog
有赞技术团队
有赞技术团队
H
Help Net Security

WSH

凑数日子 2026年,大概将会是最后一个人口保持在14亿以上的年份 感谢之人 数字经济中的注意力交易 突然的噩耗 一株洋瓜藤 再见到姑妈 港澳掠影 Miniflux 中文搜索能力增强 慢慢吹~~~轻轻送~~~ 房子梦 探索云南-大理 证书过期导致的错误 过年被追问工资 在秋天开始 水里的鱼 斩断联系1 云南壮族婚恋 我有一颗乳牙 世界的底色是争,抢,偷 无题4 无题3 人来人往 AI见闻 无题2 滇池掠影 WebGIS 三维空间分析之参考超图实现的天际线分析 我原来是个同步单线程 往事如烟1
WebGIS开发之glsl支持
WSH · 2025-08-12 · via WSH

目录

    • IDE 支持
    • Rollup 打包支持
    • Vue 开发支持

我维护的空间分析包,随着功能的不断增加,累计了许多的着色器代码,分散在不同的子包,而且还是保存在JS/TS文件里以字符串的形式。虽然可以通过ES6的语法导入,但是在编写的时候,由于IDE将其识别成字符串而不是代码的缘故,无法使用到智能提示,例如语法高亮,格式化等。有时功能逻辑稍一复杂,代码量一上来,再一个个调整格式的话就很烦人。

为解决上述提到的问题,需要将glsl代码写到独立的.glsl文件中,结合VSCode插件实现IDE编程支持,另外由于.glsl不是JS/TS模块,如果使用Rollup打包的话,还需安装一个插件。

IDE 支持

安装 Shader languages support for VS Code,这是一个VSCode插件,提供一系列着色器语言支持。

image-20250812092627005

截图自官网

Rollup 打包支持

Rollup对glsl的支持,目前有社区提供的插件rollup-plugin-glsl 来实现。

首先安装,

pnpm i rollup-plugin-glsl -D -w

在Rollup配置文件里使用插件

import glsl from 'rollup-plugin-glsl';

export default {
    ...,
  plugins: [
    glsl({
      include: 'packages/**/*.glsl',
      exclude: ['packages/**/*.html', 'packages/**/*.js', 'packages/**/*.ts'],
      sourceMap: false,
    })
  ]
};

对了,如果使用TS来开发的话,打包时会出现如下错误:

error TS2307: Cannot find module './flowWallMaterial.glsl' or its corresponding type declarations.

因为TS 默认只能识别 .ts.tsx.js.jsx文件,对于 .glsl这样的着色器文件需要额外配置,在根目录下新建一个名为glsl.d.ts的声明文件,内容如下。

declare module '*.glsl' {
  const content: string;
  export default content;
}

最后在TS配置文件里添加该声明。

{
    "compilerOptions": {...},
    "include": [
        ...,
        "glsl.d.ts"
    ]
}

Vue 开发支持

空间分析包的示例是一个Vue项目,使用Vite打包,由于我在示例里导入分析包时采取引用源码的策略,所以通过ES6导入的glsl文件Vite无法识别,解决方式很简单,再额外添加一个插件—vite-plugin-glsl

pnpm i vite-plugin-glsl --ignore-workspace
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue';
import glsl from 'vite-plugin-glsl';

export default defineConfig({
  ...,
  plugins: [
    vue(),
    glsl(),
  ],
});