1eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich/* 2eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * Copyright (C) 2009 The Android Open Source Project 3eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * 4eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * Licensed under the Apache License, Version 2.0 (the "License"); 5eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * you may not use this file except in compliance with the License. 6eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * You may obtain a copy of the License at 7eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * 8eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * http://www.apache.org/licenses/LICENSE-2.0 9eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * 10eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * Unless required by applicable law or agreed to in writing, software 11eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * distributed under the License is distributed on an "AS IS" BASIS, 12eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * See the License for the specific language governing permissions and 14eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * limitations under the License. 15eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich */ 16eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 17eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichpackage com.android.glperf; 18eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich/* 19eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * Copyright (C) 2008 The Android Open Source Project 20eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * 21eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * Licensed under the Apache License, Version 2.0 (the "License"); 22eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * you may not use this file except in compliance with the License. 23eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * You may obtain a copy of the License at 24eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * 25eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * http://www.apache.org/licenses/LICENSE-2.0 26eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * 27eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * Unless required by applicable law or agreed to in writing, software 28eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * distributed under the License is distributed on an "AS IS" BASIS, 29eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 30eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * See the License for the specific language governing permissions and 31eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * limitations under the License. 32eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich */ 33eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 34eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 35eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichimport android.content.Context; 36eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichimport android.opengl.GLSurfaceView; 37eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichimport android.util.AttributeSet; 38eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichimport android.util.Log; 39eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichimport android.view.KeyEvent; 40eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichimport android.view.MotionEvent; 41eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 42eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichimport javax.microedition.khronos.egl.EGL10; 43eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichimport javax.microedition.khronos.egl.EGLConfig; 44eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichimport javax.microedition.khronos.egl.EGLContext; 45eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichimport javax.microedition.khronos.egl.EGLDisplay; 46eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichimport javax.microedition.khronos.opengles.GL10; 47eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 48eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich/** 49eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * An implementation of SurfaceView that uses the dedicated surface for 50eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * displaying an OpenGL animation. This allows the animation to run in a 51eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * separate thread, without requiring that it be driven by the update mechanism 52eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * of the view hierarchy. 53eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * 54eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * The application-specific rendering code is delegated to a GLView.Renderer 55eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich * instance. 56eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich */ 57eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichclass GLPerfView extends GLSurfaceView { 58eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private static String TAG = "GLPerfView"; 59eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 60eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich public GLPerfView(Context context) { 61eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich super(context); 62eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich init(false, 0, 0); 63eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 64eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 65eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich public GLPerfView(Context context, boolean translucent, int depth, int stencil) { 66eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich super(context); 67eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich init(translucent, depth, stencil); 68eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 69eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 70eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private void init(boolean translucent, int depth, int stencil) { 71eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich setEGLContextFactory(new ContextFactory()); 72eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich setEGLConfigChooser( translucent ? 73eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich new ConfigChooser(8,8,8,8, depth, stencil) : 74eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich new ConfigChooser(5,6,5,0, depth, stencil)); 75eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich setRenderer(new Renderer()); 76eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 77eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 78eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private static class ContextFactory implements GLSurfaceView.EGLContextFactory { 79eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098; 80eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) { 81eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich Log.w(TAG, "creating OpenGL ES 2.0 context"); 82eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich checkEglError("Before eglCreateContext", egl); 83eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE }; 84eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list); 85eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich checkEglError("After eglCreateContext", egl); 86eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return context; 87eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 88eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 89eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context) { 90eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich egl.eglDestroyContext(display, context); 91eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 92eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 93eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 94eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private static void checkEglError(String prompt, EGL10 egl) { 95eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int error; 96eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich while ((error = egl.eglGetError()) != EGL10.EGL_SUCCESS) { 97eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich Log.e(TAG, String.format("%s: EGL error: 0x%x", prompt, error)); 98eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 99eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 100eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 101eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private static class ConfigChooser implements GLSurfaceView.EGLConfigChooser { 102eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private static int EGL_OPENGL_ES2_BIT = 4; 103eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private static int[] s_configAttribs2 = 104eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich { 105eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_RED_SIZE, 4, 106eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_GREEN_SIZE, 4, 107eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_BLUE_SIZE, 4, 108eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, 109eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_NONE 110eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich }; 111eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 112eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich public ConfigChooser(int r, int g, int b, int a, int depth, int stencil) { 113eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich mRedSize = r; 114eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich mGreenSize = g; 115eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich mBlueSize = b; 116eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich mAlphaSize = a; 117eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich mDepthSize = depth; 118eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich mStencilSize = stencil; 119eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 120eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 121eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) { 122eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 123eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int[] num_config = new int[1]; 124eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich egl.eglChooseConfig(display, s_configAttribs2, null, 0, num_config); 125eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 126eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int numConfigs = num_config[0]; 127eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 128eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (numConfigs <= 0) { 129eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich throw new IllegalArgumentException("No configs match configSpec"); 130eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 131eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGLConfig[] configs = new EGLConfig[numConfigs]; 132eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich egl.eglChooseConfig(display, s_configAttribs2, configs, numConfigs, num_config); 133eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich // printConfigs(egl, display, configs); 134eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return chooseConfig(egl, display, configs); 135eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 136eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 137eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display, 138eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGLConfig[] configs) { 139eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGLConfig closestConfig = null; 140eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int closestDistance = 1000; 141eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich for(EGLConfig config : configs) { 142eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int d = findConfigAttrib(egl, display, config, 143eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_DEPTH_SIZE, 0); 144eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int s = findConfigAttrib(egl, display, config, 145eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_STENCIL_SIZE, 0); 146eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (d >= mDepthSize && s>= mStencilSize) { 147eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int r = findConfigAttrib(egl, display, config, 148eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_RED_SIZE, 0); 149eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int g = findConfigAttrib(egl, display, config, 150eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_GREEN_SIZE, 0); 151eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int b = findConfigAttrib(egl, display, config, 152eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_BLUE_SIZE, 0); 153eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int a = findConfigAttrib(egl, display, config, 154eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_ALPHA_SIZE, 0); 155eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int distance = Math.abs(r - mRedSize) 156eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich + Math.abs(g - mGreenSize) 157eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich + Math.abs(b - mBlueSize) 158eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich + Math.abs(a - mAlphaSize); 159eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (distance < closestDistance) { 160eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich closestDistance = distance; 161eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich closestConfig = config; 162eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 163eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 164eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 165eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return closestConfig; 166eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 167eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 168eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private int findConfigAttrib(EGL10 egl, EGLDisplay display, 169eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGLConfig config, int attribute, int defaultValue) { 170eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 171eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (egl.eglGetConfigAttrib(display, config, attribute, mValue)) { 172eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return mValue[0]; 173eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 174eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return defaultValue; 175eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 176eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 177eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private void printConfigs(EGL10 egl, EGLDisplay display, 178eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGLConfig[] configs) { 179eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int numConfigs = configs.length; 180eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich Log.w(TAG, String.format("%d configurations", numConfigs)); 181eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich for (int i = 0; i < numConfigs; i++) { 182eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich Log.w(TAG, String.format("Configuration %d:\n", i)); 183eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich printConfig(egl, display, configs[i]); 184eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 185eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 186eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 187eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private void printConfig(EGL10 egl, EGLDisplay display, 188eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGLConfig config) { 189eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int[] attributes = { 190eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_BUFFER_SIZE, 191eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_ALPHA_SIZE, 192eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_BLUE_SIZE, 193eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_GREEN_SIZE, 194eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_RED_SIZE, 195eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_DEPTH_SIZE, 196eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_STENCIL_SIZE, 197eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_CONFIG_CAVEAT, 198eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_CONFIG_ID, 199eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_LEVEL, 200eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_MAX_PBUFFER_HEIGHT, 201eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_MAX_PBUFFER_PIXELS, 202eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_MAX_PBUFFER_WIDTH, 203eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_NATIVE_RENDERABLE, 204eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_NATIVE_VISUAL_ID, 205eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_NATIVE_VISUAL_TYPE, 206eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 0x3030, // EGL10.EGL_PRESERVED_RESOURCES, 207eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_SAMPLES, 208eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_SAMPLE_BUFFERS, 209eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_SURFACE_TYPE, 210eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_TRANSPARENT_TYPE, 211eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_TRANSPARENT_RED_VALUE, 212eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_TRANSPARENT_GREEN_VALUE, 213eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_TRANSPARENT_BLUE_VALUE, 214eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 0x3039, // EGL10.EGL_BIND_TO_TEXTURE_RGB, 215eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 0x303A, // EGL10.EGL_BIND_TO_TEXTURE_RGBA, 216eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 0x303B, // EGL10.EGL_MIN_SWAP_INTERVAL, 217eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 0x303C, // EGL10.EGL_MAX_SWAP_INTERVAL, 218eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_LUMINANCE_SIZE, 219eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_ALPHA_MASK_SIZE, 220eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_COLOR_BUFFER_TYPE, 221eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich EGL10.EGL_RENDERABLE_TYPE, 222eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 0x3042 // EGL10.EGL_CONFORMANT 223eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich }; 224eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich String[] names = { 225eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_BUFFER_SIZE", 226eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_ALPHA_SIZE", 227eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_BLUE_SIZE", 228eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_GREEN_SIZE", 229eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_RED_SIZE", 230eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_DEPTH_SIZE", 231eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_STENCIL_SIZE", 232eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_CONFIG_CAVEAT", 233eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_CONFIG_ID", 234eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_LEVEL", 235eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_MAX_PBUFFER_HEIGHT", 236eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_MAX_PBUFFER_PIXELS", 237eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_MAX_PBUFFER_WIDTH", 238eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_NATIVE_RENDERABLE", 239eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_NATIVE_VISUAL_ID", 240eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_NATIVE_VISUAL_TYPE", 241eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_PRESERVED_RESOURCES", 242eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_SAMPLES", 243eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_SAMPLE_BUFFERS", 244eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_SURFACE_TYPE", 245eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_TRANSPARENT_TYPE", 246eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_TRANSPARENT_RED_VALUE", 247eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_TRANSPARENT_GREEN_VALUE", 248eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_TRANSPARENT_BLUE_VALUE", 249eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_BIND_TO_TEXTURE_RGB", 250eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_BIND_TO_TEXTURE_RGBA", 251eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_MIN_SWAP_INTERVAL", 252eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_MAX_SWAP_INTERVAL", 253eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_LUMINANCE_SIZE", 254eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_ALPHA_MASK_SIZE", 255eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_COLOR_BUFFER_TYPE", 256eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_RENDERABLE_TYPE", 257eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich "EGL_CONFORMANT" 258eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich }; 259eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int[] value = new int[1]; 260eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich for (int i = 0; i < attributes.length; i++) { 261eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich int attribute = attributes[i]; 262eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich String name = names[i]; 263eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if ( egl.eglGetConfigAttrib(display, config, attribute, value)) { 264eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich Log.w(TAG, String.format(" %s: %d\n", name, value[0])); 265eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } else { 266eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich // Log.w(TAG, String.format(" %s: failed\n", name)); 267eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich while (egl.eglGetError() != EGL10.EGL_SUCCESS); 268eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 269eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 270eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 271eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 272eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich // Subclasses can adjust these values: 273eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich protected int mRedSize; 274eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich protected int mGreenSize; 275eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich protected int mBlueSize; 276eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich protected int mAlphaSize; 277eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich protected int mDepthSize; 278eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich protected int mStencilSize; 279eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private int[] mValue = new int[1]; 280eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 281eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 282eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich private static class Renderer implements GLSurfaceView.Renderer { 283eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich public void onDrawFrame(GL10 gl) { 284eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich GLPerfLib.step(); 285eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 286eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 287eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich public void onSurfaceChanged(GL10 gl, int width, int height) { 288eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich GLPerfLib.init(width, height); 289eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 290eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 291eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich public void onSurfaceCreated(GL10 gl, EGLConfig config) { 292eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich // Do nothing. 293eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 294eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 295eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 296eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 297