Intento inicializar GLES con EGL (porque quiero dibujar desde el hilo principal en lugar de usar un Renderer y dibujar desde adentro onDrawFrame). Me aparece el error: "Asegúrese de que SurfaceView o SurfaceHolder asociado tenga una superficie válida". Obviamente, mEgl.eglCreateWindowSurface falla porque surfaceHolder no tiene una superficie válida. ¿Cómo puedo obtener un SurfaceHolder con una Surface válida para continuar?¿Cómo obtener un SurfaceHolder con una superficie válida (necesaria por EGL.eglCreateWindowSurface)?
método Mi Activity.onCreate es:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GLSurfaceView surfaceView = new GLSurfaceView(this);
setContentView(surfaceView);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
Surface surface = surfaceHolder.getSurface();
Log.v("HelloAndroid", "surface.isValid()= " + Boolean.toString(surface.isValid()));
EGL10 mEgl = (EGL10) EGLContext.getEGL();
EGLDisplay mEglDisplay = mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
int[] version = new int[2];
mEgl.eglInitialize(mEglDisplay, version);
EGLConfig[] configs = new EGLConfig[1];
int[] num_config = new int[1];
int[] configSpec = {
EGL10.EGL_NONE
};
mEgl.eglChooseConfig(mEglDisplay, configSpec, configs, 1, num_config);
EGLConfig mEglConfig = configs[0];
EGLContext mEglContext = mEgl.eglCreateContext(mEglDisplay, mEglConfig,
EGL10.EGL_NO_CONTEXT, null);
EGLSurface mEglSurface = null;
Log.v("HelloAndroid", "M");
mEglSurface = mEgl.eglCreateWindowSurface(mEglDisplay,
mEglConfig, surfaceHolder, null);
Log.v("HelloAndroid", "N");
mEgl.eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface,
mEglContext);
Log.v("HelloAndroid", "O");
}
El registro de salida me sale con la plataforma de herramientas/LogCat ADB es:
V/HelloAndroid(1861): surface.isValid()= false
D/libEGL (1861): egl.cfg not found, using default config
D/libEGL (1861): loaded /system/lib/egl/libGLES_android.so
V/HelloAndroid(1861): M
D/AndroidRuntime(1861): Shutting down VM
W/dalvikvm(1861): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
E/AndroidRuntime(1861): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(1861): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.helloandroid/com.example.helloandroid.HelloAndroid}: java.lang.IllegalArgumentException: Make sure the SurfaceView or associated SurfaceHolder has a valid Surface
E/AndroidRuntime(1861): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
Cualquier ayuda se agradece.
¿Es normal que el titular de tome mucho tiempo para tomar un montón de tiempo para dar una lectura de surface.is Valid() = true durante después del inicio de la aplicación? – Ashwin