glslify-deps

WebJar for glslify-deps

License

License

ISC
GroupId

GroupId

org.webjars.npm
ArtifactId

ArtifactId

glslify-deps
Last Version

Last Version

1.3.1
Release Date

Release Date

Type

Type

jar
Description

Description

glslify-deps
WebJar for glslify-deps
Project URL

Project URL

http://webjars.org
Source Code Management

Source Code Management

https://github.com/glslify/glslify-deps

Download glslify-deps

How to add to project

<!-- https://jarcasting.com/artifacts/org.webjars.npm/glslify-deps/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>glslify-deps</artifactId>
    <version>1.3.1</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/glslify-deps/
implementation 'org.webjars.npm:glslify-deps:1.3.1'
// https://jarcasting.com/artifacts/org.webjars.npm/glslify-deps/
implementation ("org.webjars.npm:glslify-deps:1.3.1")
'org.webjars.npm:glslify-deps:jar:1.3.1'
<dependency org="org.webjars.npm" name="glslify-deps" rev="1.3.1">
  <artifact name="glslify-deps" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='glslify-deps', version='1.3.1')
)
libraryDependencies += "org.webjars.npm" % "glslify-deps" % "1.3.1"
[org.webjars.npm/glslify-deps "1.3.1"]

Dependencies

compile (8)

Group / Artifact Type Version
org.webjars.npm : graceful-fs jar [4.1.2,5)
org.webjars.npm : glsl-resolve jar [0.0.1]
org.webjars.npm : map-limit jar [0.0.1]
org.webjars.npm : resolve jar [1.0.0,2)
org.webjars.npm : choojs__findup jar [0.2.0,0.3)
org.webjars.npm : glsl-tokenizer jar [2.0.0,3)
org.webjars.npm : events jar [1.0.2,2)
org.webjars.npm : inherits jar [2.0.1,3)

Project Modules

There are no modules declared in this project.

glslify-deps

Walk the dependency graph of a glslify shader.

glslify-deps is responsible for resolving your shader's dependencies and applying their transforms before the actual source modification occurs. You may notice some parallels here with browserify's module-deps package.

While glslify-deps is an "internal" package for glslify, it may be useful to use this package directly in specific cases, e.g. building a file tree server-side but bundling the final shader on the client.

Module API

There is an asynchronous and a synchronous API:

var glslifyDeps = require('glslify-deps')
var glslifyDepsSync = require('glslify-deps/sync')

The asynchronous API is documented below. For every method in the asychronous API, instead of a callback(err, result), the result is available as the return value of the method.

depper = glslifyDeps([options])

Creates a fresh glslify-deps instance. Accepts the following options:

  • cwd: the current working directory to resolve relative file paths from.
  • readFile: pass in a custom function reading files.
  • resolve: pass in a custom function for resolving require calls. It has the same signature as glsl-resolve.
  • files: a filename/source object mapping of files to prepopulate the file cache with. Useful for overriding particular file paths manually, most notably the "entry" file.

depper.transform(transform, [options])

Adds a new transform – should be used before calling depper.add.

transform may either be a string (which is resolved like a require call), or a function. More information on transforms can be found below.

depper.add(filename, [callback])

Adds a new file to the dependency graph.

depper.inline(source, basedir, [callback])

Adds a new inline file to the dependency graph, where source is the GLSL source to include and basedir is the directory to pretend it's being created in. A basedir is required to properly resolve requires and transforms, and defaults to process.cwd().

depper.on('file', cb(filename))

Emitted whenever a new file has been included in the dependency graph.

Example Output

[
  {
    "id": 0,
    "deps": { "glsl-random": 1 },
    "file": "index.glsl",
    "source": "precision mediump float;\n#pragma glslify: random = require(glsl-random)\n",
    "entry": true
  },
  {
    "id": 1,
    "deps": {},
    "file": "node_modules/glsl-random/index.glsl",
    "source": "highp float random(vec2 co)\n{\n    highp float a = 12.9898;\n    highp float b = 78.233;\n    highp float c = 43758.5453;\n    highp float dt= dot(co.xy ,vec2(a,b));\n    highp float sn= mod(dt,3.14);\n    return fract(sin(sn) * c);\n}\n\n#pragma glslify: export(random)",
    "entry": false
  }
]

Transform API

The transform API has changed since glslify 1.0 to make it more "vanilla".

With the asynchronous API, transforms have this signature:

module.exports = function(file, source, options, done) {
  done(null, source.toUpperCase())
}

and using the synchronous API, transforms have this signature:

module.exports.sync = function(file, source, options) {
  return source.toUpperCase()
}

For an example that is compatible with both the async and sync APIs, here's glslify-hex rewritten using the new API:

var through = require('through')

var regexLong  = /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/gi
var regexShort = /#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/gi

module.exports = transform
module.exports.sync = transform

function transform(filename, src, opts, done) {
  src = src.replace(regexShort, function(whole, r, g, b, a) {
    return !a
      ? '#' + r + r + g + g + b + b
      : '#' + r + r + g + g + b + b + a + a
  }).replace(regexLong, function(whole, r, g, b, a) {
    r = makeFloat(parseInt(r, 16) / 255)
    g = makeFloat(parseInt(g, 16) / 255)
    b = makeFloat(parseInt(b, 16) / 255)
    a = makeFloat(parseInt(a, 16) / 255)

    return isNaN(a)
      ? 'vec3('+[r,g,b].join(',')+')'
      : 'vec4('+[r,g,b,a].join(',')+')'
  })

  if (typeof done === 'function') done(null, src)
  return src
}

function makeFloat(n) {
  return String(n).indexOf('.') === -1
    ? n + '.'
    : n
}

Transforms in package.json

Transforms now support options specified in package.json:

{
  "glslify": {
    "transform": [
       "glslify-hex",
      ["glslify-optimize", { "mangle": true }]
    ]
  }
}
org.webjars.npm

Versions

Version
1.3.1
1.3.0