diff --git a/Examples/AdvancedEffects/package.json b/Examples/AdvancedEffects/package.json index d3b5ae1780f52d5186ca097c712a543096cef46a..d23968d64d5e79cf648f9ce8a0a4834c75b3c33a 100644 --- a/Examples/AdvancedEffects/package.json +++ b/Examples/AdvancedEffects/package.json @@ -6,9 +6,11 @@ "start": "react-native start" }, "dependencies": { - "gl-react": "^2.0.2", + "fbjs": "^0.6.0", + "gl-react": "^2.1.0", "gl-react-native": "file:../..", "glsl-transitions": "^2015.11.8", - "react-native": "^0.17.0" + "react": "^0.14.5", + "react-native": "0.18.0-rc" } } diff --git a/Examples/AdvancedEffects/src/index.js b/Examples/AdvancedEffects/src/index.js index 9b8b63ec9cc37be61bc7a3f5eef472720b2d94d8..db9a122300b627ae36378a0d4f273bb9be435abe 100644 --- a/Examples/AdvancedEffects/src/index.js +++ b/Examples/AdvancedEffects/src/index.js @@ -1,4 +1,3 @@ -require("gl-react/react-native"); const React = require("react-native"); const { StyleSheet, diff --git a/Examples/Hearts/package.json b/Examples/Hearts/package.json index a6ca214c5bb12a0754e059ac40769b36a2db23bf..6a48d438c86619bc8c489e7eaf6e4094f300818f 100644 --- a/Examples/Hearts/package.json +++ b/Examples/Hearts/package.json @@ -7,9 +7,11 @@ }, "dependencies": { "crypto": "0.0.3", - "gl-react": "^2.0.6", + "fbjs": "^0.6.0", + "gl-react": "^2.1.0", "gl-react-native": "file:../..", - "react-native": "^0.17.0", + "react": "^0.14.5", + "react-native": "0.18.0-rc", "seedrandom": "gre/seedrandom#released" } } diff --git a/Examples/Hearts/src/Heart.js b/Examples/Hearts/src/Heart.js index 7d758475d294c9eda57b7e8eb0fbdf617e5800e5..0810192c42294419760ae8f300500c841e1842bf 100644 --- a/Examples/Hearts/src/Heart.js +++ b/Examples/Hearts/src/Heart.js @@ -1,5 +1,5 @@ import GL from "gl-react"; -const {React} = GL; +import React from "react"; const {PropTypes} = React; const shaders = GL.Shaders.create({ diff --git a/Examples/Hearts/src/index.js b/Examples/Hearts/src/index.js index f857d9c8ff136eb741a54314b377c94753663e8c..f4ce09e559dfcc850d359dc31431e57c9af00798 100644 --- a/Examples/Hearts/src/index.js +++ b/Examples/Hearts/src/index.js @@ -1,4 +1,3 @@ -require("gl-react/react-native"); const React = require("react-native"); const { StyleSheet, diff --git a/Examples/Simple/package.json b/Examples/Simple/package.json index 5503597fb42bdf7e38f2ad9e9f2f9cc2cfd56f6e..e64c9dba5a9e270b5b1a1bd699f25b70c9571d94 100644 --- a/Examples/Simple/package.json +++ b/Examples/Simple/package.json @@ -6,10 +6,12 @@ "start": "react-native start" }, "dependencies": { - "gl-react": "^2.0.8", + "fbjs": "^0.6.0", + "gl-react": "^2.1.0", "gl-react-native": "file:../..", - "react-native": "^0.17.0", + "react": "^0.14.5", + "react-native": "0.18.0-rc", "react-native-fs": "^1.1.0", - "react-native-material-kit": "^0.2.4" + "react-native-material-kit": "gre/react-native-material-kit#no-peerDependencies" } } diff --git a/Examples/Simple/src/Blur.js b/Examples/Simple/src/Blur.js index 26a5d3c05e58c356964d1cb26abcd53e86ab49e8..0f3ae20055e5043277f6520383534f8860ec2000 100644 --- a/Examples/Simple/src/Blur.js +++ b/Examples/Simple/src/Blur.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("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 feb2f21e30eb11b6e0bbab6e1a8b6aa3ccad25f8..95579e08c310faab8fbd9afdda0a21d0e6d67cbd 100644 --- a/Examples/Simple/src/Blur1D.js +++ b/Examples/Simple/src/Blur1D.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const shaders = GL.Shaders.create({ blur1D: { diff --git a/Examples/Simple/src/HelloGL.js b/Examples/Simple/src/HelloGL.js index fc08b5140f88fd6d5943794bd5e61d0c62774754..475087db222a15e0b27881915b3115a6f4ed6feb 100644 --- a/Examples/Simple/src/HelloGL.js +++ b/Examples/Simple/src/HelloGL.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const shaders = GL.Shaders.create({ helloGL: { diff --git a/Examples/Simple/src/HueRotate.js b/Examples/Simple/src/HueRotate.js index d520d5f8f287d7ef4230ab14b836bb94d85d691a..1c85254ea7b7f3a6c57039e46e99dfa1a2f30e45 100644 --- a/Examples/Simple/src/HueRotate.js +++ b/Examples/Simple/src/HueRotate.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const shaders = GL.Shaders.create({ hueRotate: { diff --git a/Examples/Simple/src/PieProgress.js b/Examples/Simple/src/PieProgress.js index 012c4593a49d0b2c130da08a405996a070f90068..a7a8d57201225969bf6cd82d0fc8b03a85689a52 100644 --- a/Examples/Simple/src/PieProgress.js +++ b/Examples/Simple/src/PieProgress.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const shaders = GL.Shaders.create({ pieProgress: { diff --git a/Examples/Simple/src/Saturation.js b/Examples/Simple/src/Saturation.js index c8088ab9b9745af097a7cfefca9e85415f1497f1..f24ec3f1fa0812a2c4403b29021f70da87c72e82 100644 --- a/Examples/Simple/src/Saturation.js +++ b/Examples/Simple/src/Saturation.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const shaders = GL.Shaders.create({ saturation: { diff --git a/Examples/Simple/src/index.js b/Examples/Simple/src/index.js index 324d743d74c150adc726a6d5b2e22da158bec289..0756153ae148f9858f58622e123bbea16de9469c 100644 --- a/Examples/Simple/src/index.js +++ b/Examples/Simple/src/index.js @@ -1,5 +1,3 @@ -require("gl-react/react-native"); - const React = require("react-native"); const { StyleSheet, diff --git a/Examples/Tests/package.json b/Examples/Tests/package.json index 5e12bf40bc25bd3c5d4c6ac546ad36512812627f..63097bb1239e5712bee65f37652f050be2232225 100644 --- a/Examples/Tests/package.json +++ b/Examples/Tests/package.json @@ -6,8 +6,10 @@ "start": "react-native start" }, "dependencies": { + "fbjs": "^0.6.0", + "gl-react": "^2.1.0", "gl-react-native": "file:../..", - "gl-react": "^2.0.2", - "react-native": "^0.17.0" + "react": "^0.14.5", + "react-native": "0.18.0-rc" } } diff --git a/Examples/Tests/src/Add.js b/Examples/Tests/src/Add.js index cbb560c36d33a2b9e0ec573d0cde53a5303c3a3f..d25edd8f3a18d67461d0fac9a601cca94f08f32c 100644 --- a/Examples/Tests/src/Add.js +++ b/Examples/Tests/src/Add.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const shaders = GL.Shaders.create({ add: { diff --git a/Examples/Tests/src/Blur.js b/Examples/Tests/src/Blur.js index d10b83b7983ae1ab0d0ef9e16a986a3449aa818c..8433c9c817e8d3364610bec48e940db3790493a8 100644 --- a/Examples/Tests/src/Blur.js +++ b/Examples/Tests/src/Blur.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const { PropTypes } = React; diff --git a/Examples/Tests/src/Blur1D.js b/Examples/Tests/src/Blur1D.js index df5067fd33f18ec473a2677841d7147363802093..b9adbfed2dfc20c64e09e0944d90db514382881e 100644 --- a/Examples/Tests/src/Blur1D.js +++ b/Examples/Tests/src/Blur1D.js @@ -1,6 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; - +const React = require("react"); const { PropTypes } = React; diff --git a/Examples/Tests/src/Copy.js b/Examples/Tests/src/Copy.js index c49efeb28ed845b8003919d01aa489039c8b0383..33be68e7da4ab5ef437db6c869e10899cb66d274 100644 --- a/Examples/Tests/src/Copy.js +++ b/Examples/Tests/src/Copy.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const shaders = GL.Shaders.create({ Copy: { diff --git a/Examples/Tests/src/Display2.js b/Examples/Tests/src/Display2.js index 6aac82fd4c8381033ca411d434f58891994f582f..003fd182219bb30a4a4837382710102ad86c24ff 100644 --- a/Examples/Tests/src/Display2.js +++ b/Examples/Tests/src/Display2.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const shaders = GL.Shaders.create({ display2: { diff --git a/Examples/Tests/src/HelloGL.js b/Examples/Tests/src/HelloGL.js index e72df0e66b87297423133ab6b8ad5bd53ba1c859..d944c7c7a0774e134b5bffea412afdc082987280 100644 --- a/Examples/Tests/src/HelloGL.js +++ b/Examples/Tests/src/HelloGL.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const shaders = GL.Shaders.create({ helloGL: { diff --git a/Examples/Tests/src/Layer.js b/Examples/Tests/src/Layer.js index 30752f5b0e717e00f249fbf0b103eee4d4fab8b3..5bef44b8124903900631610e5380d0af86e9a7a2 100644 --- a/Examples/Tests/src/Layer.js +++ b/Examples/Tests/src/Layer.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const shaders = GL.Shaders.create({ layer: { diff --git a/Examples/Tests/src/Multiply.js b/Examples/Tests/src/Multiply.js index e4cef5510f1f1c4b8c84a83ec77887ca977b0b2e..fde8023f05f9e1dfa3b5c9c794178e62cda69509 100644 --- a/Examples/Tests/src/Multiply.js +++ b/Examples/Tests/src/Multiply.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const shaders = GL.Shaders.create({ multiply: { diff --git a/Examples/Tests/src/TransparentNonPremultiplied.js b/Examples/Tests/src/TransparentNonPremultiplied.js index df8d7c322a8af669859daea65c49f8cf1286e3fb..5bc8110fe33b64779d7d7ca6979bf6e0d9bdaa0c 100644 --- a/Examples/Tests/src/TransparentNonPremultiplied.js +++ b/Examples/Tests/src/TransparentNonPremultiplied.js @@ -1,5 +1,5 @@ const GL = require("gl-react"); -const React = GL.React; +const React = require("react"); const shaders = GL.Shaders.create({ TransparentNonPremultiplied: { diff --git a/Examples/Tests/src/index.js b/Examples/Tests/src/index.js index ff197d05d344e5feaafc0071ac68b1506524bc35..c53f6c1b61b818753854383ff64a6b723eac945d 100644 --- a/Examples/Tests/src/index.js +++ b/Examples/Tests/src/index.js @@ -1,4 +1,3 @@ -require("gl-react/react-native"); const React = require("react-native"); const { Text, diff --git a/Examples/android/RNGL.iml b/Examples/android/RNGL.iml deleted file mode 100644 index d90b763d79676e58f0ed979346315239bc64de94..0000000000000000000000000000000000000000 --- a/Examples/android/RNGL.iml +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ios/GLCanvas.m b/ios/GLCanvas.m index edca8264d3642f64b69e4faa61fa875e0ac5271f..a3fee68ae0cee164addf74d09d938e8108b0686a 100644 --- a/ios/GLCanvas.m +++ b/ios/GLCanvas.m @@ -83,6 +83,22 @@ NSArray* diff (NSArray* a, NSArray* b) { RCT_NOT_IMPLEMENTED(-init) +- (void)dealloc +{ + _bridge = nil; + _images = nil; + _preloaded = nil; + _captureConfigs = nil; + _contentData = nil; + _contentTextures = nil; + _data = nil; + _renderData = nil; + if (animationTimer) { + [animationTimer invalidate]; + animationTimer = nil; + } +} + //// Props Setters - (void) requestCaptureFrame: (CaptureConfig *)config @@ -375,9 +391,11 @@ RCT_NOT_IMPLEMENTED(-init) if (_needSync) { NSError *error; - if(![self syncData:&error] && error==nil) { - // the data is not ready, retry in one tick - [self setNeedsDisplay]; + BOOL syncSuccessful = [self syncData:&error]; + BOOL errorCanBeRecovered = error==nil || (error.code != GLLinkingFailure && error.code != GLCompileFailure); + if (!syncSuccessful && errorCanBeRecovered) { + // something failed but is recoverable, retry in one tick + [self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO]; } else { _needSync = false; diff --git a/ios/GLCanvasManager.m b/ios/GLCanvasManager.m index efc7dbc4179ad6e05d9303a8ebbd14ed284bd94a..c2fd5d64a0369f94f705cdf79e0e136163f69093 100644 --- a/ios/GLCanvasManager.m +++ b/ios/GLCanvasManager.m @@ -18,6 +18,11 @@ RCT_EXPORT_MODULE(); return self; } +- (dispatch_queue_t)methodQueue +{ + return self.bridge.uiManager.methodQueue; +} + RCT_EXPORT_VIEW_PROPERTY(nbContentTextures, NSNumber); RCT_EXPORT_VIEW_PROPERTY(opaque, BOOL); RCT_EXPORT_VIEW_PROPERTY(autoRedraw, BOOL); diff --git a/ios/GLShader.h b/ios/GLShader.h index bee570c56bebd8384d2ededf7a7569004bf7a4c4..a187a1fba4cd355ffb40a6e4b6acfcc0d91d0909 100644 --- a/ios/GLShader.h +++ b/ios/GLShader.h @@ -4,7 +4,8 @@ NS_ENUM(NSInteger) { GLContextFailure = 87001, GLLinkingFailure = 87002, - GLCompileFailure = 87003 + GLCompileFailure = 87003, + GLNotAProgram = 87004 }; @interface GLShader: NSObject diff --git a/ios/GLShader.m b/ios/GLShader.m index 23eab38f2c4b4d9add0bcfd6b5ba61785f754e0a..37e5c10c84287e550dfcbb19816c19e37272646c 100644 --- a/ios/GLShader.m +++ b/ios/GLShader.m @@ -66,11 +66,20 @@ GLuint compileShader (NSString* shaderName, NSString* shaderString, GLenum shade { glDeleteProgram(program); glDeleteBuffers(1, &buffer); + _name = nil; + _context = nil; + _vert = nil; + _frag = nil; + _uniformLocations = nil; + _uniformTypes = nil; + program = 0; + buffer = 0; + pointerLoc = 0; } - (bool) ensureContext: (NSError **)error { - if (![EAGLContext setCurrentContext:_context]) { + if (!_context || ![EAGLContext setCurrentContext:_context]) { *error = [[NSError alloc] initWithDomain:@"Failed to set current OpenGL context" code:GLContextFailure userInfo:nil]; return false; } @@ -79,15 +88,6 @@ GLuint compileShader (NSString* shaderName, NSString* shaderString, GLenum shade - (void) bind { - NSError *error; - if (![self ensureContext:&error]) { - RCTLogError(@"%@", error.domain); - return; - } - if ( glIsProgram(program) != GL_TRUE ){ - RCTLogError(@"Shader '%@': not a program!", _name); - return; - } glUseProgram(program); glBindBuffer(GL_ARRAY_BUFFER, buffer); glEnableVertexAttribArray(pointerLoc); @@ -341,6 +341,13 @@ GLuint compileShader (NSString* shaderName, NSString* shaderString, GLenum shade - (bool) ensureCompiles: (NSError **)error { + if (![self ensureContext:error]) { + return false; + } + if (!glIsProgram(program)) { + *error = [[NSError alloc] initWithDomain:@"not a program" code:GLNotAProgram userInfo:nil]; + return false; + } if (_error == nil) return true; *error = _error; return false; diff --git a/package.json b/package.json index 5a70f098edb888e853beb31f7029edb8037f4c49..53b806770fbaec887066ace78964224cfa0cb1d4 100644 --- a/package.json +++ b/package.json @@ -19,15 +19,10 @@ "author": "Project September ", "license": "MIT", "peerDependencies": { - "react-native": ">= 0.17.0 <0.18.0", - "gl-react": ">= 2.0.3 <2.1.0" + "react-native": "0.18.0-rc", + "gl-react": "^2.1.0" }, "dependencies": { "invariant": "2.2.0" - }, - "devDependencies": { - "babel-eslint": "^4.1.6", - "eslint": "^1.9.0", - "eslint-plugin-react": "^3.8.0" } } diff --git a/src/GLCanvas.js b/src/GLCanvas.js index 85cfc4903be270a6fb484d0b265fc9afec6eeb3b..df14ef0c3ab28c4967b830bf914b43f282a7951b 100644 --- a/src/GLCanvas.js +++ b/src/GLCanvas.js @@ -106,7 +106,7 @@ class GLCanvas extends Component { this._pendingCaptureFrame[key].resolve(result); } delete this._pendingCaptureFrame[key]; - } + }; render () { const { width, height, onLoad, onProgress, eventsThrough, ...restProps } = this.props;