Changeset 744


Ignore:
Timestamp:
Mar 14, 2011, 2:40:37 AM (10 years ago)
Author:
sam
Message:

android: use GLES2 instead of GLES.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/monsterz/android/jni/Android.mk

    r738 r744  
    1010LOCAL_CFLAGS := -DANDROID_NDK \
    1111                -DDISABLE_IMPORTGL \
    12                 -DHAVE_GLES_1X \
     12                -DHAVE_GLES_2X \
    1313                -I$(LOCAL_PATH)/$(LOL_SRC) \
    1414                -I$(LOCAL_PATH)/$(MONSTERZ_SRC)
    1515
    16 LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog
    17 #LOCAL_LDLIBS := -lGLESv2 -ldl -llog
     16#LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog
     17LOCAL_LDLIBS := -lGLESv2 -llog
    1818
    1919include $(LOCAL_PATH)/$(LOL_SRC)/Makefile.am
  • trunk/monsterz/android/src/org/zoy/LolEngine/LolActivity.java

    r722 r744  
    1010
    1111package org.zoy.LolEngine;
    12 
    13 import javax.microedition.khronos.egl.EGLConfig;
    14 import javax.microedition.khronos.opengles.GL10;
    1512
    1613import android.app.Activity;
     
    2825import android.view.Window;
    2926
     27import javax.microedition.khronos.egl.EGL10;
     28import javax.microedition.khronos.egl.EGLConfig;
     29import javax.microedition.khronos.egl.EGLContext;
     30import javax.microedition.khronos.egl.EGLDisplay;
     31import javax.microedition.khronos.opengles.GL10;
     32
    3033public class LolActivity extends Activity
    3134{
    32     @Override
    33     protected void onCreate(Bundle savedInstanceState)
     35    @Override protected void onCreate(Bundle savedInstanceState)
    3436    {
    3537        super.onCreate(savedInstanceState);
     
    4446        nativeInit();
    4547
    46         mGLView = new LolGLSurfaceView(this);
    47         setContentView(mGLView);
    48     }
    49 
    50     @Override
    51     protected void onPause()
     48        mView = new LolView(getApplication());
     49        setContentView(mView);
     50    }
     51
     52    @Override protected void onPause()
    5253    {
    5354        super.onPause();
    54         mGLView.onPause();
    55     }
    56 
    57     @Override
    58     protected void onResume()
     55        mView.onPause();
     56    }
     57
     58    @Override protected void onResume()
    5959    {
    6060        super.onResume();
    61         mGLView.onResume();
    62     }
    63 
    64     private GLSurfaceView mGLView;
     61        mView.onResume();
     62    }
     63
     64    private LolView mView;
    6565
    6666    static
     
    9999}
    100100
    101 class LolGLSurfaceView extends GLSurfaceView
     101class LolView extends GLSurfaceView
    102102{
    103     public LolGLSurfaceView(Context context)
     103    public LolView(Context context)
    104104    {
    105105        super(context);
    106         mRenderer = new LolRenderer();
    107         setRenderer(mRenderer);
     106        setEGLContextFactory(new ContextFactory());
     107        setEGLConfigChooser(new ConfigChooser(5, 6, 5, 0, 0, 0));
     108        setRenderer(new LolRenderer());
     109    }
     110
     111    private static class ContextFactory implements GLSurfaceView.EGLContextFactory
     112    {
     113        private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
     114        public EGLContext createContext(EGL10 egl, EGLDisplay dpy, EGLConfig cfg)
     115        {
     116            Log.w("LOL", "creating OpenGL ES 2.0 context");
     117            int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE };
     118            EGLContext ctx = egl.eglCreateContext(dpy, cfg, EGL10.EGL_NO_CONTEXT, attrib_list);
     119            return ctx;
     120        }
     121
     122        public void destroyContext(EGL10 egl, EGLDisplay dpy, EGLContext ctx)
     123        {
     124            egl.eglDestroyContext(dpy, ctx);
     125        }
     126    }
     127
     128    private static class ConfigChooser implements GLSurfaceView.EGLConfigChooser
     129    {
     130        public ConfigChooser(int r, int g, int b, int a, int depth, int stencil)
     131        {
     132            mRed = r;
     133            mGreen = g;
     134            mBlue = b;
     135            mAlpha = a;
     136            mDepth = depth;
     137            mStencil = stencil;
     138        }
     139
     140        private static int EGL_OPENGL_ES2_BIT = 4;
     141        private static int[] s_configAttribs2 =
     142        {
     143            EGL10.EGL_RED_SIZE, 4,
     144            EGL10.EGL_GREEN_SIZE, 4,
     145            EGL10.EGL_BLUE_SIZE, 4,
     146            EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
     147            EGL10.EGL_NONE
     148        };
     149
     150        public EGLConfig chooseConfig(EGL10 egl, EGLDisplay dpy)
     151        {
     152            int[] num_config = new int[1];
     153            egl.eglChooseConfig(dpy, s_configAttribs2, null, 0, num_config);
     154
     155            int n = num_config[0];
     156            if (n <= 0)
     157                throw new IllegalArgumentException("No GLES configs");
     158
     159            EGLConfig[] configs = new EGLConfig[n];
     160            egl.eglChooseConfig(dpy, s_configAttribs2, configs, n, num_config);
     161            return choose(egl, dpy, configs);
     162        }
     163
     164        public EGLConfig choose(EGL10 egl, EGLDisplay dpy, EGLConfig[] configs)
     165        {
     166            for(EGLConfig cfg : configs)
     167            {
     168                // We need at least mDepth and mStencil bits
     169                // We want an *exact* match for red/green/blue/alpha
     170                if (get(egl, dpy, cfg, EGL10.EGL_STENCIL_SIZE, 0) >= mStencil
     171                 && get(egl, dpy, cfg, EGL10.EGL_DEPTH_SIZE, 0) >= mDepth
     172                 && get(egl, dpy, cfg, EGL10.EGL_RED_SIZE, 0) == mRed
     173                 && get(egl, dpy, cfg, EGL10.EGL_GREEN_SIZE, 0) == mGreen
     174                 && get(egl, dpy, cfg, EGL10.EGL_BLUE_SIZE, 0) == mBlue
     175                 && get(egl, dpy, cfg, EGL10.EGL_ALPHA_SIZE, 0) == mAlpha)
     176                    return cfg;
     177            }
     178            return null;
     179        }
     180
     181        private int get(EGL10 egl, EGLDisplay dpy, EGLConfig cfg,
     182                        int attr, int defval)
     183        {
     184            int[] value = new int[1];
     185
     186            if (egl.eglGetConfigAttrib(dpy, cfg, attr, value))
     187                return value[0];
     188            return defval;
     189        }
     190
     191        protected int mRed, mGreen, mBlue, mAlpha, mDepth, mStencil;
    108192    }
    109193
     
    129213    }
    130214
    131     LolRenderer mRenderer;
    132 
    133215    private static native void nativePause();
    134216    private static native void nativeDown();
     
    146228    public void onSurfaceChanged(GL10 gl, int w, int h)
    147229    {
    148         //gl.glViewport(0, 0, w, h);
    149230        Log.w("LOL", String.format("resizing to %dx%d", w, h));
    150231        nativeResize(w, h);
  • trunk/src/androidapp.cpp

    r719 r744  
    6565
    6666extern "C" void
    67 Java_org_zoy_LolEngine_LolGLSurfaceView_nativePause(JNIEnv* env)
     67Java_org_zoy_LolEngine_LolView_nativePause(JNIEnv* env)
    6868{
    6969    /* TODO: unimplemented */
     
    7171
    7272extern "C" void
    73 Java_org_zoy_LolEngine_LolGLSurfaceView_nativeDown(JNIEnv* env)
     73Java_org_zoy_LolEngine_LolView_nativeDown(JNIEnv* env)
    7474{
    7575    Input::SetMouseButton(0);
     
    7777
    7878extern "C" void
    79 Java_org_zoy_LolEngine_LolGLSurfaceView_nativeUp(JNIEnv* env)
     79Java_org_zoy_LolEngine_LolView_nativeUp(JNIEnv* env)
    8080{
    8181    Input::UnsetMouseButton(0);
     
    8383
    8484extern "C" void
    85 Java_org_zoy_LolEngine_LolGLSurfaceView_nativeMove(JNIEnv* env, jobject thiz,
    86                                                    jint x, jint y)
     85Java_org_zoy_LolEngine_LolView_nativeMove(JNIEnv* env, jobject thiz,
     86                                          jint x, jint y)
    8787{
    8888    vec2i pos(x * 640 / Video::GetWidth(),
Note: See TracChangeset for help on using the changeset viewer.