Gitbook documentation / Github / live demos / gl-react-native / #gl-react on reactiflux
gl-react
WebGL bindings for React to implement complex effects over images and content, in the descriptive VDOM paradigm.
More technically, gl-react
allows you to write a fragment shader that covers a component. The shader can render: generated graphics/demos, effects on top of images, effects over content (video, canvas)... anything you can imagine!
There's also gl-react-native
, a React Native version implementing the same API.
Examples
Open Examples page / Read the code.
HelloGL Gist
const React = require("react");
const GL = require("gl-react");
const shaders = GL.Shaders.create({
helloGL: {
frag: `
precision highp float;
varying vec2 uv;
uniform float blue;
void main () {
gl_FragColor = vec4(uv.x, uv.y, blue, 1.0);
}`
}
});
module.exports = GL.createComponent(
({ blue, ...rest }) =>
<GL.View
{...rest}
shader={shaders.helloGL}
uniforms={{ blue }}
/>,
{ displayName: "HelloGL" });
<HelloGL width={511} height={341} blue={0.5} />
renders
Focus
- Virtual DOM and immutable paradigm: OpenGL is a low level imperative and mutable API. This library takes the best of it and exposes it in an immutable, descriptive way.
- Performance
- Developer experience: the application doesn't crash on bugs - Live Reload support make experimenting with effects easy (also
gl-react-native
's version uses React Native error message to display GLSL errors). - Uniform bindings: bindings from JavaScript objects to OpenGL GLSL language types (bool, int, float, vec2, vec3, vec4, mat2, mat3, mat4, sampler2D...)
- Support for images as a texture uniform.
- Support for
<canvas>
, <video>
as a texture uniform.
Installation
npm i --save gl-react
Influence / Credits