diff --git a/android/src/main/java/com/projectseptember/RNGL/GLCanvas.java b/android/src/main/java/com/projectseptember/RNGL/GLCanvas.java index 40cf63cb32ddf32e13148ddd5fcd0e72cad07890..38a49caf0411e8ee260f15578de729ed75c3945b 100644 --- a/android/src/main/java/com/projectseptember/RNGL/GLCanvas.java +++ b/android/src/main/java/com/projectseptember/RNGL/GLCanvas.java @@ -206,6 +206,7 @@ public class GLCanvas extends GLSurfaceView public void setData (GLData data) { this.data = data; + renderData = null; if (!haveRemainingToPreload()) syncContentBitmaps(); requestSyncData(); } @@ -586,13 +587,13 @@ public class GLCanvas extends GLSurfaceView private boolean syncData () { if (data == null) return true; - HashMap images = new HashMap<>(); - GLRenderData node = recSyncData(data, images); + HashMap newImages = new HashMap<>(); + GLRenderData node = recSyncData(data, newImages); if (node == null) return false; Set imagesGone = diff(this.images.keySet(), images.keySet()); + images = newImages; + preloaded.removeAll(imagesGone); renderData = node; - this.images = images; - this.preloaded.removeAll(imagesGone); return true; } @@ -647,16 +648,18 @@ public class GLCanvas extends GLSurfaceView } private void render () { - if (renderData == null) return; + GLRenderData rd = renderData; + if (rd == null) return; syncContentTextures(); int[] defaultFBOArr = new int[1]; glGetIntegerv(GL_FRAMEBUFFER_BINDING, defaultFBOArr, 0); defaultFBO = defaultFBOArr[0]; glEnable(GL_BLEND); - recRender(renderData); + recRender(rd); glDisable(GL_BLEND); glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO); + glBindBuffer(GL_ARRAY_BUFFER, 0); if (dirtyOnLoad && !haveRemainingToPreload()) { dirtyOnLoad = false; diff --git a/ios/GLCanvas.m b/ios/GLCanvas.m index 9250e7d07092086033f292e987bb5eb31c348382..f3446bd77a37063fa1fed27317f57252a0341afe 100644 --- a/ios/GLCanvas.m +++ b/ios/GLCanvas.m @@ -138,6 +138,7 @@ RCT_NOT_IMPLEMENTED(-init) - (void)setData:(GLData *)data { _data = data; + _renderData = nil; [self requestSyncData]; } @@ -366,7 +367,7 @@ RCT_NOT_IMPLEMENTED(-init) NSData *frameData = UIImagePNGRepresentation(frameImage); NSString *frame = [NSString stringWithFormat:@"data:image/png;base64,%@", - [frameData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]]; + [frameData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]]; if (weakSelf.onGLCaptureFrame) weakSelf.onGLCaptureFrame(@{ @"frame": frame }); }); } @@ -375,7 +376,8 @@ RCT_NOT_IMPLEMENTED(-init) - (void)render { - if (!_renderData) return; + GLRenderData *rd = _renderData; + if (!rd) return; CGFloat scale = RCTScreenScale(); @@ -426,9 +428,10 @@ RCT_NOT_IMPLEMENTED(-init) glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO); glEnable(GL_BLEND); - recDraw(_renderData); + recDraw(rd); glDisable(GL_BLEND); glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO); + glBindBuffer(GL_ARRAY_BUFFER, 0); if (_dirtyOnLoad && ![self haveRemainingToPreload]) { _dirtyOnLoad = false;