const React = require("react"); const GL = require("gl-react"); const { Spring } = require("react-motion"); const shaders = GL.Shaders.create({ demo: { frag: ` precision mediump float; varying vec2 uv; uniform vec2 mouse; void main () { float dist = pow(1.0 - distance(mouse, uv), 8.0); float edgeDistX = pow(1.0 - distance(mouse.x, uv.x), 32.0); float edgeDistY = pow(1.0 - distance(mouse.y, uv.y), 32.0); gl_FragColor = vec4( 0.8 * dist + edgeDistX, 0.7 * dist + edgeDistY, 0.6 * dist, 1.0) * smoothstep(1.0, 0.2, distance(mouse, uv)); } ` } }); class Demo extends React.Component { constructor (props) { super(props); this.state = { width: window.innerWidth, height: window.innerHeight, mouse: { x: window.innerWidth/2, y: window.innerHeight/2 } }; this.onMouseMove = this.onMouseMove.bind(this); } componentDidMount () { window.addEventListener("resize", () => { this.setState({ width: window.innerWidth, height: window.innerHeight }); }); } onMouseMove (e) { this.setState({ mouse: { x: e.clientX, y: e.clientY } }); } render () { const { width, height, mouse } = this.state; return { ({ val: { x, y } }) => } ; } } React.render(, document.getElementById("container"));