Commit 38d45165 authored by Gaëtan Renaudeau's avatar Gaëtan Renaudeau

renderData set back to nil when data changes

Attempt to fix #38
parent b8c60b78
...@@ -206,6 +206,7 @@ public class GLCanvas extends GLSurfaceView ...@@ -206,6 +206,7 @@ public class GLCanvas extends GLSurfaceView
public void setData (GLData data) { public void setData (GLData data) {
this.data = data; this.data = data;
renderData = null;
if (!haveRemainingToPreload()) syncContentBitmaps(); if (!haveRemainingToPreload()) syncContentBitmaps();
requestSyncData(); requestSyncData();
} }
...@@ -586,13 +587,13 @@ public class GLCanvas extends GLSurfaceView ...@@ -586,13 +587,13 @@ public class GLCanvas extends GLSurfaceView
private boolean syncData () { private boolean syncData () {
if (data == null) return true; if (data == null) return true;
HashMap<Uri, GLImage> images = new HashMap<>(); HashMap<Uri, GLImage> newImages = new HashMap<>();
GLRenderData node = recSyncData(data, images); GLRenderData node = recSyncData(data, newImages);
if (node == null) return false; if (node == null) return false;
Set<Uri> imagesGone = diff(this.images.keySet(), images.keySet()); Set<Uri> imagesGone = diff(this.images.keySet(), images.keySet());
images = newImages;
preloaded.removeAll(imagesGone);
renderData = node; renderData = node;
this.images = images;
this.preloaded.removeAll(imagesGone);
return true; return true;
} }
...@@ -647,16 +648,18 @@ public class GLCanvas extends GLSurfaceView ...@@ -647,16 +648,18 @@ public class GLCanvas extends GLSurfaceView
} }
private void render () { private void render () {
if (renderData == null) return; GLRenderData rd = renderData;
if (rd == null) return;
syncContentTextures(); syncContentTextures();
int[] defaultFBOArr = new int[1]; int[] defaultFBOArr = new int[1];
glGetIntegerv(GL_FRAMEBUFFER_BINDING, defaultFBOArr, 0); glGetIntegerv(GL_FRAMEBUFFER_BINDING, defaultFBOArr, 0);
defaultFBO = defaultFBOArr[0]; defaultFBO = defaultFBOArr[0];
glEnable(GL_BLEND); glEnable(GL_BLEND);
recRender(renderData); recRender(rd);
glDisable(GL_BLEND); glDisable(GL_BLEND);
glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO); glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO);
glBindBuffer(GL_ARRAY_BUFFER, 0);
if (dirtyOnLoad && !haveRemainingToPreload()) { if (dirtyOnLoad && !haveRemainingToPreload()) {
dirtyOnLoad = false; dirtyOnLoad = false;
......
...@@ -138,6 +138,7 @@ RCT_NOT_IMPLEMENTED(-init) ...@@ -138,6 +138,7 @@ RCT_NOT_IMPLEMENTED(-init)
- (void)setData:(GLData *)data - (void)setData:(GLData *)data
{ {
_data = data; _data = data;
_renderData = nil;
[self requestSyncData]; [self requestSyncData];
} }
...@@ -366,7 +367,7 @@ RCT_NOT_IMPLEMENTED(-init) ...@@ -366,7 +367,7 @@ RCT_NOT_IMPLEMENTED(-init)
NSData *frameData = UIImagePNGRepresentation(frameImage); NSData *frameData = UIImagePNGRepresentation(frameImage);
NSString *frame = NSString *frame =
[NSString stringWithFormat:@"data:image/png;base64,%@", [NSString stringWithFormat:@"data:image/png;base64,%@",
[frameData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]]; [frameData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]];
if (weakSelf.onGLCaptureFrame) weakSelf.onGLCaptureFrame(@{ @"frame": frame }); if (weakSelf.onGLCaptureFrame) weakSelf.onGLCaptureFrame(@{ @"frame": frame });
}); });
} }
...@@ -375,7 +376,8 @@ RCT_NOT_IMPLEMENTED(-init) ...@@ -375,7 +376,8 @@ RCT_NOT_IMPLEMENTED(-init)
- (void)render - (void)render
{ {
if (!_renderData) return; GLRenderData *rd = _renderData;
if (!rd) return;
CGFloat scale = RCTScreenScale(); CGFloat scale = RCTScreenScale();
...@@ -426,9 +428,10 @@ RCT_NOT_IMPLEMENTED(-init) ...@@ -426,9 +428,10 @@ RCT_NOT_IMPLEMENTED(-init)
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO); glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO);
glEnable(GL_BLEND); glEnable(GL_BLEND);
recDraw(_renderData); recDraw(rd);
glDisable(GL_BLEND); glDisable(GL_BLEND);
glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO); glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO);
glBindBuffer(GL_ARRAY_BUFFER, 0);
if (_dirtyOnLoad && ![self haveRemainingToPreload]) { if (_dirtyOnLoad && ![self haveRemainingToPreload]) {
_dirtyOnLoad = false; _dirtyOnLoad = false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment