npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

gl-shader-core

v2.2.0

Published

Core implementation of gl-shader without parser dependencies

Downloads

2,619

Readme

gl-shader-core

The core of gl-shader, without the parser. It can be used to compile shaders without including the (relatively large) glsl-parser dependencies, or invoked directly by libraries which use a transform.

Install

npm install gl-shader-core

API

var shader = require("gl-shader-core")(gl, vertexSource, fragmentSource, uniforms, attributes)

Constructs a packaged gl-shader object with shims for all of the uniforms and attributes in the program.

  • gl is the webgl context in which the program will be created
  • vertexSource is the source code for the vertex shader
  • fragmentSource is the source code for the fragment shader
  • uniforms is a list of all uniforms exported by the shader program
  • attributes is a list of all attributes exported by the shader program

The uniform and attributes variables have output which is consistent with glsl-extract.

Returns A compiled shader object.

You can specify a default location number for each attribute, otherwise WebGL will bind it automatically.

Methods

shader.bind()

Binds the shader for rendering

shader.dispose()

Deletes the shader program and associated resources.

Properties

gl

The WebGL context associated to the shader

handle

A handle to the underlying WebGL program object

vertexShader

A handle to the underlying WebGL fragment shader object

fragmentShader

A handle to the underlying WebGL vertex shader object

Uniforms

The uniforms for the shader program are packaged up as properties in the shader.uniforms object. For example, to update a scalar uniform you can just assign to it:

shader.uniforms.scalar = 1.0

While you can update vector uniforms by writing an array to them:

shader.uniforms.vector = [1,0,1,0]

Matrix uniforms must have their arrays flattened first:

shader.uniforms.matrix = [ 1, 0, 1, 0,
                           0, 1, 0, 0,
                           0, 0, 1, 1,
                           0, 0, 0, 1 ]

You can also read the value of uniform too if the underlying shader is currently bound. For example,

console.log(shader.uniforms.scalar)
console.log(shader.uniforms.vector)
console.log(shader.uniforms.matrix)

Struct uniforms can also be accessed using the normal dot property syntax. For example,

shader.uniforms.light[0].color = [1, 0, 0, 1]

Attributes

The basic idea behind the attribute interface is similar to that for uniforms, however because attributes can be either a constant value or get values from a vertex array they have a slightly more complicated interface. All of the attributes are stored in the shader.attributes property.

attrib = constant

For non-array attributes you can set the constant value to be broadcast across all vertices. For example, to set the vertex color of a shader to a constant you could do:

shader.attributes.color = [1, 0, 0, 1]

This internally uses gl.vertexAttribnf. Setting the attribute will also call gl.disableVertexAttribArray on the attribute's location.

attrib.location

This property accesses the location of the attribute. You can assign/read from it to modify the location of the attribute. For example, you can update the location by doing:

attrib.location = 0

Or you can read the currently bound location back by just accessing it:

console.log(attrib.location)

Internally, these methods just call gl.bindAttribLocation and access the stored location.

WARNING Changing the attribute location requires recompiling the program. Do not dynamically modify this variable in your render loop.

attrib.pointer([type, normalized, stride, offset])

A shortcut for gl.vertexAttribPointer/gl.enableVertexAttribArray. See the OpenGL man page for details on how this works. The main difference here is that the WebGL context, size and index are known and so these parameters are bound.

  • type is the type of the pointer (default gl.FLOAT)
  • normalized specifies whether fixed-point data values should be normalized (true) or converted directly as fixed-point values (false) when they are accessed. (Default false)
  • stride the byte offset between consecutive generic vertex attributes. (Default: 0)
  • offset offset of the first element of the array in bytes. (Default 0)

Reflection

Finally, the library supports some reflection capabilities. The set of all uniforms and data types are stored in the "type" property of the shader object,

console.log(shader.types)

This reflects the uniform and attribute parameters that were passed to the shader constructor.

Credits

(c) 2013 Mikola Lysenko. MIT License