package org.anddev.andengine.opengl.view; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import org.anddev.andengine.engine.Engine; import org.anddev.andengine.opengl.util.GLHelper; import org.anddev.andengine.util.Debug; import android.content.Context; import android.util.AttributeSet; /** * (c) 2010 Nicolas Gramlich * (c) 2011 Zynga Inc. * * @author Nicolas Gramlich * @since 11:57:29 - 08.03.2010 */ public class RenderSurfaceView extends GLSurfaceView { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== private Renderer mRenderer; // =========================================================== // Constructors // =========================================================== public RenderSurfaceView(final Context pContext) { super(pContext); } public RenderSurfaceView(final Context pContext, final AttributeSet pAttrs) { super(pContext, pAttrs); } public void setRenderer(final Engine pEngine) { this.setOnTouchListener(pEngine); this.mRenderer = new Renderer(pEngine); this.setRenderer(this.mRenderer); } /** * @see android.view.View#measure(int, int) */ @Override protected void onMeasure(final int pWidthMeasureSpec, final int pHeightMeasureSpec) { this.mRenderer.mEngine.getEngineOptions().getResolutionPolicy().onMeasure(this, pWidthMeasureSpec, pHeightMeasureSpec); } public void setMeasuredDimensionProxy(final int pMeasuredWidth, final int pMeasuredHeight) { this.setMeasuredDimension(pMeasuredWidth, pMeasuredHeight); } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== // =========================================================== // Methods // =========================================================== // =========================================================== // Inner and Anonymous Classes // =========================================================== /** * (c) 2010 Nicolas Gramlich * (c) 2011 Zynga Inc. * * @author Nicolas Gramlich * @since 11:45:59 - 08.03.2010 */ public static class Renderer implements GLSurfaceView.Renderer { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== private final Engine mEngine; // =========================================================== // Constructors // =========================================================== public Renderer(final Engine pEngine) { this.mEngine = pEngine; } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== @Override public void onSurfaceChanged(final GL10 pGL, final int pWidth, final int pHeight) { Debug.d("onSurfaceChanged: pWidth=" + pWidth + " pHeight=" + pHeight); this.mEngine.setSurfaceSize(pWidth, pHeight); pGL.glViewport(0, 0, pWidth, pHeight); pGL.glLoadIdentity(); } @Override public void onSurfaceCreated(final GL10 pGL, final EGLConfig pConfig) { Debug.d("onSurfaceCreated"); GLHelper.reset(pGL); GLHelper.setPerspectiveCorrectionHintFastest(pGL); // pGL.glEnable(GL10.GL_POLYGON_SMOOTH); // pGL.glHint(GL10.GL_POLYGON_SMOOTH_HINT, GL10.GL_NICEST); // pGL.glEnable(GL10.GL_LINE_SMOOTH); // pGL.glHint(GL10.GL_LINE_SMOOTH_HINT, GL10.GL_NICEST); // pGL.glEnable(GL10.GL_POINT_SMOOTH); // pGL.glHint(GL10.GL_POINT_SMOOTH_HINT, GL10.GL_NICEST); GLHelper.setShadeModelFlat(pGL); GLHelper.disableLightning(pGL); GLHelper.disableDither(pGL); GLHelper.disableDepthTest(pGL); GLHelper.disableMultisample(pGL); GLHelper.enableBlend(pGL); GLHelper.enableTextures(pGL); GLHelper.enableTexCoordArray(pGL); GLHelper.enableVertexArray(pGL); GLHelper.enableCulling(pGL); pGL.glFrontFace(GL10.GL_CCW); pGL.glCullFace(GL10.GL_BACK); GLHelper.enableExtensions(pGL, this.mEngine.getEngineOptions().getRenderOptions()); } @Override public void onDrawFrame(final GL10 pGL) { try { this.mEngine.onDrawFrame(pGL); } catch (final InterruptedException e) { Debug.e("GLThread interrupted!", e); } } // =========================================================== // Methods // =========================================================== // =========================================================== // Inner and Anonymous Classes // =========================================================== } }