package min3d.core; import min3d.Shared; import min3d.interfaces.ISceneController; import android.app.Activity; import android.opengl.GLSurfaceView; import android.os.Bundle; import android.os.Handler; /** * Extend this class when creating your min3d-based Activity. * Then, override initScene() and updateScene() for your main * 3D logic. * * Override onCreateSetContentView() to change layout, if desired. * * To update 3d scene-related variables from within the the main UI thread, * override onUpdateScene() and onUpdateScene() as needed. */ public class RendererActivity extends Activity implements ISceneController { public Scene scene; protected GLSurfaceView _glSurfaceView; protected Handler _initSceneHander; protected Handler _updateSceneHander; final Runnable _initSceneRunnable = new Runnable() { public void run() { onInitScene(); } }; final Runnable _updateSceneRunnable = new Runnable() { public void run() { onUpdateScene(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); _initSceneHander = new Handler(); _updateSceneHander = new Handler(); // // These 4 lines are important. // Shared.context(this); scene = new Scene(this); Renderer r = new Renderer(scene); Shared.renderer(r); _glSurfaceView = new GLSurfaceView(this); // TESTING - MAKE GLSURFACEVIEW TRANSPARENT // CAN'T FIGURE THIS OUT WTF: // _glSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); // _glSurfaceView.setEGLConfigChooser(8,8,8,8, 16, 0); // Uncomment for logging: // _glSurfaceView.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR | GLSurfaceView.DEBUG_LOG_GL_CALLS); _glSurfaceView.setRenderer(r); _glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY); onCreateSetContentView(); } protected GLSurfaceView glSurfaceView() { return _glSurfaceView; } /** * Separated out for easier overriding... */ protected void onCreateSetContentView() { setContentView(_glSurfaceView); } @Override protected void onResume() { super.onResume(); _glSurfaceView.onResume(); } @Override protected void onPause() { super.onPause(); _glSurfaceView.onPause(); } /** * Instantiation of Object3D's, setting their properties, and adding Object3D's * to the scene should be done here. Or any point thereafter. * * Note that this method is always called after GLCanvas is created, which occurs * not only on Activity.onCreate(), but on Activity.onResume() as well. * It is the user's responsibility to build the logic to restore state on-resume. */ public void initScene() { } /** * All manipulation of scene and Object3D instance properties should go here. * Gets called on every frame, right before drawing. */ public void updateScene() { } /** * Called _after_ scene init (ie, after initScene). * Unlike initScene(), is thread-safe. */ public void onInitScene() { } /** * Called _after_ scene init (ie, after initScene). * Unlike initScene(), is thread-safe. */ public void onUpdateScene() { } public Handler getInitSceneHandler() { return _initSceneHander; } public Handler getUpdateSceneHandler() { return _updateSceneHander; } public Runnable getInitSceneRunnable() { return _initSceneRunnable; } public Runnable getUpdateSceneRunnable() { return _updateSceneRunnable; } }