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.**
[](./Examples/Simple)[](./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
-
+[**Gitbook**](http://projectseptemberinc.gitbooks.io/gl-react/content/)
## Installation
@@ -54,14 +25,3 @@ npm i --save gl-react-native
**Configure your React Native Application:**

-
-
-## 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
+};