diff --git a/Examples/AdvancedEffects/package.json b/Examples/AdvancedEffects/package.json index 15135c74bd52190fad7cee1c27d5098a4f4de588..1e6931874f6204b094a36baffa432afb67207e4a 100644 --- a/Examples/AdvancedEffects/package.json +++ b/Examples/AdvancedEffects/package.json @@ -7,6 +7,7 @@ }, "dependencies": { "gl-react-native": "file:../..", + "gl-react": "file:../../../gl-react", "glsl-transitions": "^2015.11.8", "react-native": "^0.14.2" } diff --git a/Examples/AdvancedEffects/src/Banner.js b/Examples/AdvancedEffects/src/Banner.js index e05bab690e50a19bbe04ff4b1f6c8152b1263a6c..e8bbe7f1ded31705072d32b459f567ed9af0d0fa 100644 --- a/Examples/AdvancedEffects/src/Banner.js +++ b/Examples/AdvancedEffects/src/Banner.js @@ -1,6 +1,6 @@ const React = require("react-native"); - -const GL = require("gl-react-native"); +const GL = require("gl-react"); +const {Surface} = require("gl-react-native"); const shaders = GL.Shaders.create({ banner: { frag: ` @@ -27,13 +27,9 @@ void main( void ) { class Banner extends React.Component { render () { const { width, height, time } = this.props; - return ; + return + + ; } } diff --git a/Examples/AdvancedEffects/src/Intro.js b/Examples/AdvancedEffects/src/Intro.js index dc243e9c5e7a098d07fc8d7ce68f95deb357df52..662829851bf5a0c7421249dcb69c6aef568bf9c7 100644 --- a/Examples/AdvancedEffects/src/Intro.js +++ b/Examples/AdvancedEffects/src/Intro.js @@ -3,8 +3,8 @@ const { View, Text, } = React; - -const GL = require("gl-react-native"); +const GL = require("gl-react"); +const {Surface} = require("gl-react-native"); const shaders = GL.Shaders.create({ drunkEffect: { @@ -40,38 +40,37 @@ void main() { class Intro extends React.Component { render () { const { time, fps, width, height } = this.props; - return - - - - GL REACT NATIVE - - - - - {time.toFixed(2)}s - - - {(fps).toFixed(0)} fps - - - {""} + return + + + + + GL REACT NATIVE + + + + {time.toFixed(2)}s + + + {(fps).toFixed(0)} fps + + + {""} + + - - - ; + + + ; } } diff --git a/Examples/AdvancedEffects/src/Slideshow.js b/Examples/AdvancedEffects/src/Slideshow.js index 32744d0fcdf81beecf5496fba81cc186653c7888..5ed9223530b67d3ce1baa49a460e6683af7bbe77 100644 --- a/Examples/AdvancedEffects/src/Slideshow.js +++ b/Examples/AdvancedEffects/src/Slideshow.js @@ -1,6 +1,7 @@ const React = require("react-native"); const { View, Text, StyleSheet } = React; -const GL = require("gl-react-native"); +const GL = require("gl-react"); +const {Surface} = require("gl-react-native"); const TransitionGenerator = require("./TransitionGenerator"); const Transition = require("./Transition"); @@ -33,15 +34,15 @@ class Slideshow extends React.Component { const transitionUniforms = this._uniforms; return - + + + {transitionName} (GLSL.io) diff --git a/Examples/AdvancedEffects/src/Transition.js b/Examples/AdvancedEffects/src/Transition.js index cfe273a72cba4b704c28b0185e9bb067478231bb..dd89ad57eb2642ae1ff165f6966f19ed1301caed 100644 --- a/Examples/AdvancedEffects/src/Transition.js +++ b/Examples/AdvancedEffects/src/Transition.js @@ -1,10 +1,10 @@ const React = require("react-native"); -const GL = require("gl-react-native"); +const GL = require("gl-react"); module.exports = GL.createComponent( ({ width, height, shader, progress, from, to, uniforms }) => { const scale = React.PixelRatio.get(); - return true} - onMoveShouldSetResponder={() => true} - onResponderMove={this.onResponderMove} - shader={shaders.imageVignette} + return ; + preload + onStartShouldSetResponder={() => true} + onMoveShouldSetResponder={() => true} + onResponderMove={this.onResponderMove}> + + ; } } diff --git a/Examples/AdvancedEffects/src/index.js b/Examples/AdvancedEffects/src/index.js index 46ad8f249ee1bb095f1d384c43e8a97886d65c4a..9b8b63ec9cc37be61bc7a3f5eef472720b2d94d8 100644 --- a/Examples/AdvancedEffects/src/index.js +++ b/Examples/AdvancedEffects/src/index.js @@ -1,3 +1,4 @@ +require("gl-react/react-native"); const React = require("react-native"); const { StyleSheet, @@ -61,6 +62,7 @@ class AdvancedEffects extends React.Component { width={viewportW} height={introH} /> + ; + return + + ; } } diff --git a/Examples/Simple/src/Blur.js b/Examples/Simple/src/Blur.js index 234c0cc7b676d6e45c24121046488b75140428c1..26a5d3c05e58c356964d1cb26abcd53e86ab49e8 100644 --- a/Examples/Simple/src/Blur.js +++ b/Examples/Simple/src/Blur.js @@ -1,5 +1,5 @@ -const React = require("react-native"); -const GL = require("gl-react-native"); +const GL = require("gl-react"); +const React = GL.React; const Blur1D = require("./Blur1D"); module.exports = GL.createComponent(({ width, height, factor, children }) => diff --git a/Examples/Simple/src/Blur1D.js b/Examples/Simple/src/Blur1D.js index b9a73371d60a83560d2b0d4bb9e5a37cff74a6bb..feb2f21e30eb11b6e0bbab6e1a8b6aa3ccad25f8 100644 --- a/Examples/Simple/src/Blur1D.js +++ b/Examples/Simple/src/Blur1D.js @@ -1,5 +1,5 @@ -const React = require("react-native"); -const GL = require("gl-react-native"); +const GL = require("gl-react"); +const React = GL.React; const shaders = GL.Shaders.create({ blur1D: { @@ -35,7 +35,7 @@ void main () { module.exports = GL.createComponent( ({ width, height, direction, children }) => - {children} - + , { displayName: "Blur1D" }); diff --git a/Examples/Simple/src/HelloGL.js b/Examples/Simple/src/HelloGL.js index 30ac478d37ca26fbf3ee3793623dc4698acee7ad..fc08b5140f88fd6d5943794bd5e61d0c62774754 100644 --- a/Examples/Simple/src/HelloGL.js +++ b/Examples/Simple/src/HelloGL.js @@ -1,5 +1,5 @@ -const React = require("react-native"); -const GL = require("gl-react-native"); +const GL = require("gl-react"); +const React = GL.React; const shaders = GL.Shaders.create({ helloGL: { @@ -14,11 +14,7 @@ void main () { // This function is called FOR EACH PIXEL } }); -module.exports = GL.createComponent(({ width, height }) => - , +module.exports = GL.createComponent(() => + , { displayName: "HelloGL" } ); diff --git a/Examples/Simple/src/HueRotate.js b/Examples/Simple/src/HueRotate.js index cc1e0d26148a7649b9d1ae14c1fed08f550e2cf2..d520d5f8f287d7ef4230ab14b836bb94d85d691a 100644 --- a/Examples/Simple/src/HueRotate.js +++ b/Examples/Simple/src/HueRotate.js @@ -1,5 +1,5 @@ -const React = require("react-native"); -const GL = require("gl-react-native"); +const GL = require("gl-react"); +const React = GL.React; const shaders = GL.Shaders.create({ hueRotate: { @@ -26,10 +26,10 @@ void main() { module.exports = GL.createComponent( ({ hue, children, ...rest }) => - {children} - + , { displayName: "HueRotate" }); diff --git a/Examples/Simple/src/OneFingerResponse.js b/Examples/Simple/src/OneFingerResponse.js index 3f360311eb32d49ecad9850baaaecc65cfc300ce..0841cec26ef8d4429821b0531dc23667fada6f3e 100644 --- a/Examples/Simple/src/OneFingerResponse.js +++ b/Examples/Simple/src/OneFingerResponse.js @@ -1,5 +1,6 @@ const React = require("react-native"); -const GL = require("gl-react-native"); +const GL = require("gl-react"); +const {Surface} = require("gl-react-native"); const shaders = GL.Shaders.create({ oneFingerResponse: { @@ -55,7 +56,7 @@ class OneFingerResponse extends React.Component { render () { const { width, height } = this.props; const { pressed, position } = this.state; - return true} onMoveShouldSetResponderCapture={() => true} onResponderTerminationRequest={() => false} @@ -64,10 +65,12 @@ class OneFingerResponse extends React.Component { onResponderRelease={this.onTouchEnd} onResponderTerminate={this.onTouchEnd} width={width} - height={height} - shader={shaders.oneFingerResponse} - uniforms={{ pressed, position }} - />; + height={height}> + + ; } } diff --git a/Examples/Simple/src/PieProgress.js b/Examples/Simple/src/PieProgress.js index 5435c5cc14e2e93f94a4f4e7b9c9601fc67a3306..012c4593a49d0b2c130da08a405996a070f90068 100644 --- a/Examples/Simple/src/PieProgress.js +++ b/Examples/Simple/src/PieProgress.js @@ -1,5 +1,5 @@ -const React = require("react-native"); -const GL = require("gl-react-native"); +const GL = require("gl-react"); +const React = GL.React; const shaders = GL.Shaders.create({ pieProgress: { @@ -41,11 +41,8 @@ module.exports = GL.createComponent( colorOutside, radius }) => - - this.setState({ current })} value={current}> - + + + {captured && } @@ -117,12 +123,12 @@ class Simple extends Component { - + + this.setState({ saturationFactor })} @@ -130,15 +136,13 @@ class Simple extends Component { - - - Throw me to the wolves - {text} - + + + + Throw me to the wolves + {text} + + this.setState({ hue })} @@ -161,11 +165,9 @@ class Simple extends Component { }} source={{ uri: "http://i.imgur.com/qM9BHCy.jpg" }}/> - + + + - - http://i.imgur.com/3On9QEu.jpg - + + + http://i.imgur.com/3On9QEu.jpg + + this.setState({ factor })} /> - - + - - this.setState({ factor })} - /> - - this.setState({ switch1 })} /> - this.setState({ switch2 })} /> - this.setState({ switch3 })} /> - - + factor={factor}> + + + this.setState({ factor })} + /> + + this.setState({ switch1 })} /> + this.setState({ switch2 })} /> + this.setState({ switch3 })} /> + + - + + - - + + diff --git a/Examples/Tests/package.json b/Examples/Tests/package.json index 4202c44cd905f5a16c5b2f3d7cf4886738de9c0e..7cd494b3b84d6a9e24c74b60d3ae2b5188e17be3 100644 --- a/Examples/Tests/package.json +++ b/Examples/Tests/package.json @@ -7,7 +7,8 @@ }, "dependencies": { "gl-react-native": "file:../..", - "react-native": "^0.15.0" + "gl-react": "file:../../../gl-react", + "react-native": "^0.14.2" }, "devDependencies": { "react-native-cli": "^0.1.7" diff --git a/Examples/Tests/src/Add.js b/Examples/Tests/src/Add.js index 348abd7e6024167879bd2def5f80629604295dd3..cbb560c36d33a2b9e0ec573d0cde53a5303c3a3f 100644 --- a/Examples/Tests/src/Add.js +++ b/Examples/Tests/src/Add.js @@ -1,5 +1,5 @@ -const React = require("react-native"); -const GL = require("gl-react-native"); +const GL = require("gl-react"); +const React = GL.React; const shaders = GL.Shaders.create({ add: { @@ -23,7 +23,7 @@ module.exports = GL.createComponent( ({ width, height, children }) => { if (!children || children.length !== 2) throw new Error("You must provide 2 children to Add"); const [t1, t2] = children; - return - {children} - + , { displayName: "Blur1D" }); diff --git a/Examples/Tests/src/Copy.js b/Examples/Tests/src/Copy.js index 85da29376448556b5353069f9fa6a75954298d5d..c49efeb28ed845b8003919d01aa489039c8b0383 100644 --- a/Examples/Tests/src/Copy.js +++ b/Examples/Tests/src/Copy.js @@ -1,5 +1,5 @@ -const React = require("react-native"); -const GL = require("gl-react-native"); +const GL = require("gl-react"); +const React = GL.React; const shaders = GL.Shaders.create({ Copy: { @@ -23,7 +23,7 @@ void main () { module.exports = GL.createComponent( ({ width, height, children: t, last, ...rest }) => - - { if (!children || children.length !== 2) throw new Error("You must provide 2 children to Layer"); const [t1, t2] = children; - return { if (!children || children.length !== 2) throw new Error("You must provide 2 children to Multiply"); const [t1, t2] = children; - return - )} ; - const img = "http://i.imgur.com/zJIxPEo.jpg?t="+Date.now(); + const img = "http://i.imgur.com/zJIxPEo.jpg"; const blurredImage = @@ -68,22 +68,23 @@ class Tests extends React.Component { ; return - - - {txt} - {helloGL} - - - - - {blurredImageOverText} - {helloGL} - - - {blurredImage} + + + + {txt} + {helloGL} + + + + + {blurredImageOverText} + {helloGL} + + + {blurredImage} + - - + @@ -94,47 +95,40 @@ class Tests extends React.Component { - - http://i.imgur.com/mp79p5T.png - - - - - - - + + http://i.imgur.com/mp79p5T.png - + - - + + http://i.imgur.com/mp79p5T.png - + - - + + http://i.imgur.com/mp79p5T.png - + - + @@ -144,28 +138,35 @@ class Tests extends React.Component { - + - - - - - - + + + + + + + http://i.imgur.com/mp79p5T.png + + + + + + - + - + @@ -173,42 +174,62 @@ class Tests extends React.Component { - - + + - - http://i.imgur.com/S22HNaU.png - + - - + + - - http://i.imgur.com/mp79p5T.png - - - - + + + + + + + + http://i.imgur.com/S22HNaU.png + + + + + + - - http://i.imgur.com/mp79p5T.png - - - - - http://i.imgur.com/S22HNaU.png - - - - - + + + http://i.imgur.com/mp79p5T.png + + + + + + + + + + + + http://i.imgur.com/mp79p5T.png + + + + + http://i.imgur.com/S22HNaU.png + + + + + + diff --git a/Examples/build.sh b/Examples/build.sh index 3746580f110cf3ec3819f7470918a52570081d08..4d63d31a6c644ae7300aec3221633b8b5f404ce0 100755 --- a/Examples/build.sh +++ b/Examples/build.sh @@ -1,9 +1,7 @@ for ex in */; do cd $ex; - #rm -rf node_modules; - #npm i; - npm i gl-react-native; - react-native bundle --minify; + rm -rf node_modules; + npm i; cd ..; done; diff --git a/README.md b/README.md index 6b51637b75d25d4e5ed2802d0c15655d931cd092..118ee6834568114e8d8e1de2fd3c74e44f9f65c3 100644 --- a/README.md +++ b/README.md @@ -4,42 +4,13 @@ OpenGL bindings for react-native to implement complex effects over images and components, in the descriptive VDOM paradigm. -More technically, `gl-react-native` allows you to write a [fragment shader](https://www.opengl.org/wiki/Fragment_Shader) that covers a View. The shader can render: generated graphics/demos, effects on top of images, effects over any UI content... anything you can imagine! - -**`gl-react-native` is directly inspired from our other project, [`gl-react`](http://github.com/ProjectSeptemberInc/gl-react) and implements the same API (so you can write "universal" code).** +**`gl-react-native` is an implementation of `gl-react` for React Native. Please [read the main gl-react README](https://github.com/ProjectSeptemberInc/gl-react/) for more information.** [![](https://github.com/ProjectSeptemberInc/gl-react-native/raw/master/docs/simple.gif)](./Examples/Simple)[![](https://github.com/ProjectSeptemberInc/gl-react-native/raw/master/docs/advancedeffects.gif)](./Examples/AdvancedEffects) -### HelloGL Gist - -```js -const React = require("react-native"); -const GL = require("gl-react-native"); - -const shaders = GL.Shaders.create({ - helloGL: { - frag: ` -precision highp float; -varying vec2 uv; -void main () { - gl_FragColor = vec4(uv.x, uv.y, 0.5, 1.0); -}` - } -}); - -class HelloGL extends GL.Component { - render () { - const { width, height } = this.props; - return ; - } -} -``` +## Documentation -![](https://github.com/ProjectSeptemberInc/gl-react-native/raw/master/docs/hellogl.jpg) +[**Gitbook**](http://projectseptemberinc.gitbooks.io/gl-react/content/) ## Installation @@ -54,14 +25,3 @@ npm i --save gl-react-native **Configure your React Native Application:** ![](https://github.com/ProjectSeptemberInc/gl-react-native/raw/master/docs/install-steps.png) - - -## Influence / Credits - -- [stack.gl](http://stack.gl/) approach -- [GLSL.io](http://glsl.io/) and [Diaporama](https://github.com/gre/diaporama) -- Source code of [React Native](https://github.com/facebook/react-native) - -## Documentation - -[**Gitbook**](http://projectseptemberinc.gitbooks.io/gl-react/content/) diff --git a/index.android.js b/index.android.js index 101d3174fe2b6fcd98645a4548c6305e6318634a..d7900e11dfff9acca7d3bfc19a8cfa4408833e19 100644 --- a/index.android.js +++ b/index.android.js @@ -1,13 +1 @@ -const Shaders = require("./src/Shaders"); -const View = require("./src/View"); -const Uniform = require("./src/Uniform"); -const Component = require("./src/ComponentDeprecated"); -const createComponent = require("./src/createComponent"); - -module.exports = { - Shaders, - View, - Uniform, - Component, - createComponent -}; +module.exports = require("./src"); diff --git a/index.ios.js b/index.ios.js index 101d3174fe2b6fcd98645a4548c6305e6318634a..d7900e11dfff9acca7d3bfc19a8cfa4408833e19 100644 --- a/index.ios.js +++ b/index.ios.js @@ -1,13 +1 @@ -const Shaders = require("./src/Shaders"); -const View = require("./src/View"); -const Uniform = require("./src/Uniform"); -const Component = require("./src/ComponentDeprecated"); -const createComponent = require("./src/createComponent"); - -module.exports = { - Shaders, - View, - Uniform, - Component, - createComponent -}; +module.exports = require("./src"); diff --git a/ios/GLData.h b/ios/GLData.h index 610261f101d699a562ee315a5f0e20cf19050280..4523918aff428a0fe32dfc80ffc7fc1a20184429 100644 --- a/ios/GLData.h +++ b/ios/GLData.h @@ -1,6 +1,6 @@ #import -// Data format of gl-react-core +// Data format of gl-react @interface GLData: NSObject diff --git a/package.json b/package.json index 4f5ba812d815c30259217244498787cd4b06febf..faf52792ff5bb31ba58b4113f39d92bf149c1d00 100644 --- a/package.json +++ b/package.json @@ -19,11 +19,11 @@ "author": "Project September ", "license": "MIT", "peerDependencies": { - "react-native": ">=0.9.0" + "react-native": ">=0.13.0 <0.16.0", + "gl-react": "*" }, "dependencies": { - "invariant": "2.2.0", - "gl-react-core": "1.2.x" + "invariant": "2.2.0" }, "devDependencies": { "eslint": "^1.9.0", diff --git a/src/ComponentDeprecated.js b/src/ComponentDeprecated.js deleted file mode 100644 index 55810f3185b9a786f0899d8086f736b074bb800b..0000000000000000000000000000000000000000 --- a/src/ComponentDeprecated.js +++ /dev/null @@ -1,3 +0,0 @@ -const React = require("react-native"); -const {createComponentDeprecated} = require("gl-react-core"); -module.exports = createComponentDeprecated(React); diff --git a/src/Shaders.js b/src/Shaders.js index 62c46d83d43f544ea61d9b1382a079843fe51376..6b30f8a288938a7ed17c2242fd1c1fc7b77555ea 100644 --- a/src/Shaders.js +++ b/src/Shaders.js @@ -1,4 +1,4 @@ -const {createShaders} = require("gl-react-core"); +const {createShaders} = require("gl-react"); const { NativeModules: { RNGLContext } } = require("react-native"); module.exports = createShaders(function (id, shader) { diff --git a/src/View.js b/src/Surface.js similarity index 55% rename from src/View.js rename to src/Surface.js index 975ed9c68bf2b418d4952671f641473733cf18d9..2141b2c1822d98ae6fc934a4fa9ac45e18515721 100644 --- a/src/View.js +++ b/src/Surface.js @@ -1,14 +1,12 @@ -const {createView} = require("gl-react-core"); +const {createSurface} = require("gl-react"); const React = require("react-native"); -const Shaders = require("./Shaders"); -const Uniform = require("./Uniform"); const GLCanvas = require("./GLCanvas"); const { View, } = React; -const renderVcontent = function (width, height, id, children, { visibleContent }) { +function renderVcontent (width, height, id, children, { visibleContent }) { const childrenStyle = { position: "absolute", top: visibleContent ? 0 : height, // as a workaround for RN, we offset the content so it is not visible but still can be rasterized @@ -18,13 +16,13 @@ const renderVcontent = function (width, height, id, children, { visibleContent } overflow: "hidden" }; return {children}; -}; +} -const renderVGL = function (props) { +function renderVGL (props) { return ; -}; +} -const renderVcontainer = function ({ style, width, height }, contents, renderer) { +function renderVcontainer ({ style, width, height }, contents, renderer) { const parentStyle = { position: "relative", ...style, @@ -36,12 +34,6 @@ const renderVcontainer = function ({ style, width, height }, contents, renderer) {contents} {renderer} ; -}; +} -const GLView = createView(React, Shaders, Uniform, renderVcontainer, renderVcontent, renderVGL); - -GLView.prototype.setNativeProps = function (props) { - this.refs.native.setNativeProps(props); -}; - -module.exports = GLView; +module.exports = createSurface(renderVcontainer, renderVcontent, renderVGL); diff --git a/src/Uniform.js b/src/Uniform.js deleted file mode 100644 index b5bc1c2c08e88591bd49f2edf5afad9f470dab6d..0000000000000000000000000000000000000000 --- a/src/Uniform.js +++ /dev/null @@ -1,3 +0,0 @@ -const {createUniform} = require("gl-react-core"); -const React = require("react-native"); -module.exports = createUniform(React); diff --git a/src/createComponent.js b/src/createComponent.js deleted file mode 100644 index 71f83410df11173e13c8b2b085410b988e2165ad..0000000000000000000000000000000000000000 --- a/src/createComponent.js +++ /dev/null @@ -1,4 +0,0 @@ -const React = require("react-native"); -const View = require("./View"); -const {createComponent} = require("gl-react-core"); -module.exports = createComponent(React, View); diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000000000000000000000000000000000000..b4aa06d8073a6dfd65772d7b3a8031a956ffeba7 --- /dev/null +++ b/src/index.js @@ -0,0 +1,11 @@ +const { Shaders } = require("gl-react"); +const Surface = require("./Surface"); +const { NativeModules: { RNGLContext } } = require("react-native"); + +// Hook Shaders to RNGLContext +Shaders.list().map(id => RNGLContext.addShader(id, Shaders.get(id))); +Shaders.on("add", (id, shader) => RNGLContext.addShader(id, shader)); + +module.exports = { + Surface +};