Giter Club home page Giter Club logo

unplugin-glsl's Introduction

unplugin-glsl

NPM version

Import, inline (and compress) GLSL shader files, compatible with Vite, Rollup, Webpack, esbuild and Rspack by unplugin.

@import will be converted to #include.

Example

Demo

precision highp float;

#include /glsl/chunk0.frag;

out highp vec4 fragColor;

void main (void) {
  fragColor = chunkFn();
}

@import ./import/imported.glsl;

Usage

pnpm add unplugin-glsl

With TypeScript

Add extension declarations to your types in tsconfig.json:

{
  "compilerOptions": {
    "types": [
      "vite-plugin-glsl/ext"
    ]
  }
}

or as a package dependency directive to your global types:

/// <reference types="vite-plugin-glsl/ext" />

Default Options

glsl({
  include: [ // Glob pattern, or array of glob patterns to import
    '**/*.glsl',
    '**/*.wgsl',
    '**/*.vert',
    '**/*.frag',
    '**/*.vs',
    '**/*.fs'
  ],
  exclude: undefined, // Glob pattern, or array of glob patterns to ignore
  warnDuplicatedImports: true, // Warn if the same chunk was imported multiple times
  defaultExtension: 'glsl', // Shader suffix when no extension is specified
  compress: false, // Compress output shader code
  watch: true, // Recompile shader on change
  root: '/' // Directory for root imports
})
Vite
// vite.config.ts
import GLSL from 'unplugin-glsl/vite'

export default defineConfig({
  plugins: [
    GLSL({ /* options */ }),
  ],
})

Example: playground/


Rollup
// rollup.config.js
import GLSL from 'unplugin-glsl/rollup'

export default {
  plugins: [
    GLSL({ /* options */ }),
  ],
}


Webpack
// webpack.config.js
const glsl = require('unplugin-glsl/webpack').default

module.exports = {
  /* ... */
  plugins: [
    glsl({ /* options */ })
  ]
}


Nuxt
// nuxt.config.js
export default defineNuxtConfig({
  modules: [
    ['unplugin-glsl/nuxt', { /* options */ }],
  ],
})

This module works for both Nuxt 2 and Nuxt Vite


esbuild
// esbuild.config.js
import { build } from 'esbuild'
import GLSL from 'unplugin-glsl/esbuild'

build({
  plugins: [GLSL()],
})


Why unplugin-glsl?

We need @import in webpack-glsl-loader, which is not supported in vite-plugin-glsl.

And uniform performance across different build tools.

Dev

  • Install: pnpm i
  • Dev: pnpm run dev
  • Release: pnpm run release

Ref

unplugin-glsl's People

Contributors

yunyoujun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.