X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=android%2Fproject%2Fxscreensaver%2Fsrc%2Forg%2Fjwz%2Fxscreensaver%2FXScreenSaverRenderer.java;h=5ae5a5a823a988d2b1440c20a0ae6be601c6c698;hb=4361b69d3178d7fc98d0388f9a223af6c2651aba;hp=9889ea866306c16dad8a5a497c7c8d06496c6eec;hpb=aa75c7476aeaa84cf3abc192b376a8b03c325213;p=xscreensaver diff --git a/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverRenderer.java b/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverRenderer.java index 9889ea86..5ae5a5a8 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; @@ -36,14 +38,21 @@ public class XScreenSaverRenderer implements GLSurfaceView.Renderer { jwxyz jwxyz_obj = null; String hack; - int api; Handler.Callback abort_callback; - Iterable> prefs; Context app; - 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() + ": " + @@ -56,25 +65,43 @@ public class XScreenSaverRenderer implements GLSurfaceView.Renderer { abort_callback.handleMessage (m); } - public XScreenSaverRenderer (String hack, int api, - Context app, WindowManager wm, + public XScreenSaverRenderer (String hack, + Context app, Bitmap screenshot, - Handler.Callback abort_callback) { + Handler.Callback abort_callback, + GLSurfaceView glview) { super(); this.hack = hack; - this.api = api; this.app = app; - this.wm = wm; - this.prefs = prefs; this.screenshot = screenshot; this.abort_callback = abort_callback; - LOG ("init %s %d", hack, api); + this.glview = glview; + LOG ("init %s", hack); + + this.glview.setEGLConfigChooser (8, 8, 8, 8, 16, 0); + this.glview.setRenderer (this); + this.glview.setRenderMode (GLSurfaceView.RENDERMODE_WHEN_DIRTY); + } + + static public String saverNameOf (Object obj) { + // Extract the saver name from e.g. "gen.Daydream$BouncingCow" + String name = obj.getClass().getSimpleName(); + int index = name.lastIndexOf('$'); + if (index != -1) { + index++; + name = name.substring (index, name.length() - index); + } + return name.toLowerCase(); } 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); } @@ -83,21 +110,24 @@ public class XScreenSaverRenderer implements GLSurfaceView.Renderer { public void onSurfaceChanged(GL10 gl, int w, int h) { try { if (jwxyz_obj == null) - jwxyz_obj = new jwxyz (hack, api, app, screenshot, w, h); + jwxyz_obj = new jwxyz (hack, app, screenshot, w, h); - double r; + double r = 0; - Display d = wm.getDefaultDisplay(); + Display d = glview.getDisplay(); - switch (d.getRotation()) { - case Surface.ROTATION_90: r = 90; break; - case Surface.ROTATION_180: r = 180; break; - case Surface.ROTATION_270: r = 270; break; - default: r = 0; break; + if (d != null) { + switch (d.getRotation()) { + case Surface.ROTATION_90: r = 90; break; + case Surface.ROTATION_180: r = 180; break; + case Surface.ROTATION_270: r = 270; break; + } } jwxyz_obj.nativeResize (w, h, r); + glview.requestRender(); + } catch (RuntimeException e) { except (e); }