X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=android%2Fproject%2Fxscreensaver%2Fsrc%2Forg%2Fjwz%2Fxscreensaver%2FXScreenSaverRenderer.java;fp=android%2Fproject%2Fxscreensaver%2Fsrc%2Forg%2Fjwz%2Fxscreensaver%2FXScreenSaverRenderer.java;h=f854636cdff40e6f397f1a4a86f5388ae96d4b92;hp=9889ea866306c16dad8a5a497c7c8d06496c6eec;hb=d6b0217f2417bd19187f0ebc389d6c5c2233b11c;hpb=aa75c7476aeaa84cf3abc192b376a8b03c325213 diff --git a/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverRenderer.java b/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverRenderer.java index 9889ea86..f854636c 100644 --- a/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverRenderer.java +++ b/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverRenderer.java @@ -22,6 +22,8 @@ import android.view.KeyEvent; import android.content.Context; import android.graphics.Bitmap; import android.opengl.GLSurfaceView; +import java.util.Timer; +import java.util.TimerTask; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import org.jwz.xscreensaver.jwxyz; @@ -44,6 +46,16 @@ public class XScreenSaverRenderer implements GLSurfaceView.Renderer { WindowManager wm; Bitmap screenshot; + GLSurfaceView glview; + + class RenderTask extends TimerTask { + public void run() { + glview.requestRender(); + } + }; + + Timer timer = new Timer(); + private void LOG (String fmt, Object... args) { Log.d ("xscreensaver", this.getClass().getSimpleName() + ": " + @@ -59,7 +71,8 @@ public class XScreenSaverRenderer implements GLSurfaceView.Renderer { public XScreenSaverRenderer (String hack, int api, Context app, WindowManager wm, Bitmap screenshot, - Handler.Callback abort_callback) { + Handler.Callback abort_callback, + GLSurfaceView glview) { super(); this.hack = hack; this.api = api; @@ -68,13 +81,18 @@ public class XScreenSaverRenderer implements GLSurfaceView.Renderer { this.prefs = prefs; this.screenshot = screenshot; this.abort_callback = abort_callback; + this.glview = glview; LOG ("init %s %d", hack, api); } public void onDrawFrame (GL10 gl) { try { - if (jwxyz_obj != null) - jwxyz_obj.nativeRender(); + if (jwxyz_obj != null) { + long delay = jwxyz_obj.nativeRender(); + // java.util.Timer doesn't seem to like to re-use TimerTasks, so + // there's a slow object churn here: one TimerTask per frame. + timer.schedule(new RenderTask(), delay / 1000); + } } catch (RuntimeException e) { except (e); } @@ -98,6 +116,8 @@ public class XScreenSaverRenderer implements GLSurfaceView.Renderer { jwxyz_obj.nativeResize (w, h, r); + glview.requestRender(); + } catch (RuntimeException e) { except (e); }