From ca1d788973915356e5fcbbe9129e5d03102addc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Renaudeau?= Date: Fri, 13 Nov 2015 21:17:52 +0100 Subject: [PATCH] wip --- .../com/projectseptember/RNGL/GLCanvas.java | 21 +++++++++---------- .../java/com/projectseptember/RNGL/GLFBO.java | 2 +- .../com/projectseptember/RNGL/GLImage.java | 14 +++++++++---- .../com/projectseptember/RNGL/GLShader.java | 1 - .../projectseptember/RNGL/GLShaderData.java | 13 ++++++++++++ .../projectseptember/RNGL/RunInGLThread.java | 5 +++++ 6 files changed, 39 insertions(+), 17 deletions(-) create mode 100644 android/src/main/java/com/projectseptember/RNGL/GLShaderData.java create mode 100644 android/src/main/java/com/projectseptember/RNGL/RunInGLThread.java diff --git a/android/src/main/java/com/projectseptember/RNGL/GLCanvas.java b/android/src/main/java/com/projectseptember/RNGL/GLCanvas.java index a590ad0..7638d65 100644 --- a/android/src/main/java/com/projectseptember/RNGL/GLCanvas.java +++ b/android/src/main/java/com/projectseptember/RNGL/GLCanvas.java @@ -32,7 +32,7 @@ import java.util.logging.Logger; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; -public class GLCanvas extends GLSurfaceView implements GLSurfaceView.Renderer { +public class GLCanvas extends GLSurfaceView implements GLSurfaceView.Renderer, RunInGLThread { private static final Logger logger = Logger.getLogger(GLCanvas.class.getName()); @@ -58,6 +58,9 @@ public class GLCanvas extends GLSurfaceView implements GLSurfaceView.Renderer { private Map images = new HashMap<>(); private List contentTextures = new ArrayList<>(); + private Map shaders = new HashMap<>(); + private Map fbos = new HashMap<>(); + public GLCanvas(ThemedReactContext context) { super(context); reactContext = context; @@ -113,8 +116,8 @@ public class GLCanvas extends GLSurfaceView implements GLSurfaceView.Renderer { } public void setNbContentTextures(int nbContentTextures) { + resizeUniformContentTextures(nbContentTextures); this.nbContentTextures = nbContentTextures; - // TODO: resize uniform content textures } public void setRenderId(int renderId) { @@ -195,7 +198,7 @@ public class GLCanvas extends GLSurfaceView implements GLSurfaceView.Renderer { // Sync methods private final Queue mRunOnDraw = new LinkedList<>(); - protected void runOnDraw (final Runnable runnable) { + public void runInGLThread (final Runnable runnable) { synchronized (mRunOnDraw) { mRunOnDraw.add(runnable); requestRender(); @@ -210,7 +213,7 @@ public class GLCanvas extends GLSurfaceView implements GLSurfaceView.Renderer { } public void requestSyncData () { - runOnDraw(new Runnable() { + runInGLThread(new Runnable() { public void run() { if (ensureCompiledShader(data)) syncData(); @@ -349,16 +352,11 @@ public class GLCanvas extends GLSurfaceView implements GLSurfaceView.Renderer { images.put(src, image); } if (image == null) { - image = new GLImage(reactContext.getApplicationContext(), new Runnable() { + image = new GLImage(reactContext.getApplicationContext(), this, new Runnable() { public void run() { onImageLoad(src); } - }); // TODO bind on load - /* - [[GLImage alloc] initWithBridge:_bridge withOnLoad:^{ - if (weakSelf) [weakSelf onImageLoad:src]; - }]; - */ + }); image.setSrc(src); images.put(src, image); } @@ -576,6 +574,7 @@ public class GLCanvas extends GLSurfaceView implements GLSurfaceView.Renderer { public void syncEventsThrough () { // TODO: figure out how to do this (Obj C code below) + // FIXME: probably we should just define {style} on JS side. check if there is support for touchEvents:"none" //self.userInteractionEnabled = !(_eventsThrough); //self.superview.userInteractionEnabled = !(_eventsThrough && !_visibleContent); } diff --git a/android/src/main/java/com/projectseptember/RNGL/GLFBO.java b/android/src/main/java/com/projectseptember/RNGL/GLFBO.java index d5b6b4f..87477fe 100644 --- a/android/src/main/java/com/projectseptember/RNGL/GLFBO.java +++ b/android/src/main/java/com/projectseptember/RNGL/GLFBO.java @@ -6,7 +6,7 @@ import java.util.logging.Logger; import static android.opengl.GLES20.*; -public class GLFBO {// TODO +public class GLFBO { private static final Logger logger = Logger.getLogger(GLFBO.class.getName()); public final List color = new ArrayList<>(); diff --git a/android/src/main/java/com/projectseptember/RNGL/GLImage.java b/android/src/main/java/com/projectseptember/RNGL/GLImage.java index 7015ef7..7248f88 100644 --- a/android/src/main/java/com/projectseptember/RNGL/GLImage.java +++ b/android/src/main/java/com/projectseptember/RNGL/GLImage.java @@ -37,10 +37,12 @@ public class GLImage { private boolean isDirty; private AsyncTask task; private Runnable onload; + private RunInGLThread glScheduler; - public GLImage (Context context, Runnable onload) { + public GLImage (Context context, RunInGLThread glScheduler, Runnable onload) { this.context = context; this.onload = onload; + this.glScheduler = glScheduler; this.texture = new GLTexture(); } @@ -72,9 +74,13 @@ public class GLImage { isDirty = true; } - public void onLoad (Bitmap bitmap) { - texture.setPixels(bitmap); - this.onload.run(); + public void onLoad (final Bitmap bitmap) { + glScheduler.runInGLThread(new Runnable() { + public void run() { + texture.setPixels(bitmap); + onload.run(); + } + }); } public GLTexture getTexture() { diff --git a/android/src/main/java/com/projectseptember/RNGL/GLShader.java b/android/src/main/java/com/projectseptember/RNGL/GLShader.java index 6fc37fd..932e43f 100644 --- a/android/src/main/java/com/projectseptember/RNGL/GLShader.java +++ b/android/src/main/java/com/projectseptember/RNGL/GLShader.java @@ -27,7 +27,6 @@ public class GLShader { this.name = name; this.vert = vert; this.frag = frag; - makeProgram(); } @Override diff --git a/android/src/main/java/com/projectseptember/RNGL/GLShaderData.java b/android/src/main/java/com/projectseptember/RNGL/GLShaderData.java new file mode 100644 index 0000000..aae6a0d --- /dev/null +++ b/android/src/main/java/com/projectseptember/RNGL/GLShaderData.java @@ -0,0 +1,13 @@ +package com.projectseptember.RNGL; + +public class GLShaderData { + public final String name; + public final String vert; + public final String frag; + + public GLShaderData(String name, String vert, String frag) { + this.name = name; + this.vert = vert; + this.frag = frag; + } +} diff --git a/android/src/main/java/com/projectseptember/RNGL/RunInGLThread.java b/android/src/main/java/com/projectseptember/RNGL/RunInGLThread.java new file mode 100644 index 0000000..426eb03 --- /dev/null +++ b/android/src/main/java/com/projectseptember/RNGL/RunInGLThread.java @@ -0,0 +1,5 @@ +package com.projectseptember.RNGL; + +public interface RunInGLThread { + public void runInGLThread(final Runnable runnable); +} -- 2.26.2