Merge changes Id682ab72,I9bb4dbae into eclair-mr2
* changes: Improve error message thrown when eglCreateContext fails. Improve error reporting by always returning the public EGL10.EGL_NO_XXX objects for displays, surfaces, and contexts.
This commit is contained in:
@ -847,7 +847,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
|
|||||||
*/
|
*/
|
||||||
mEglContext = mEGLContextFactory.createContext(mEgl, mEglDisplay, mEglConfig);
|
mEglContext = mEGLContextFactory.createContext(mEgl, mEglDisplay, mEglConfig);
|
||||||
if (mEglContext == null || mEglContext == EGL10.EGL_NO_CONTEXT) {
|
if (mEglContext == null || mEglContext == EGL10.EGL_NO_CONTEXT) {
|
||||||
throw new RuntimeException("createContext failed");
|
throwEglException("createContext");
|
||||||
}
|
}
|
||||||
|
|
||||||
mEglSurface = null;
|
mEglSurface = null;
|
||||||
|
@ -47,16 +47,27 @@ public class EGLImpl implements EGL10 {
|
|||||||
public native boolean eglWaitNative(int engine, Object bindTarget);
|
public native boolean eglWaitNative(int engine, Object bindTarget);
|
||||||
|
|
||||||
public EGLContext eglCreateContext(EGLDisplay display, EGLConfig config, EGLContext share_context, int[] attrib_list) {
|
public EGLContext eglCreateContext(EGLDisplay display, EGLConfig config, EGLContext share_context, int[] attrib_list) {
|
||||||
return new EGLContextImpl( _eglCreateContext(display, config, share_context, attrib_list) );
|
int eglContextId = _eglCreateContext(display, config, share_context, attrib_list);
|
||||||
|
if (eglContextId == 0) {
|
||||||
|
return EGL10.EGL_NO_CONTEXT;
|
||||||
|
}
|
||||||
|
return new EGLContextImpl( eglContextId );
|
||||||
}
|
}
|
||||||
|
|
||||||
public EGLSurface eglCreatePbufferSurface(EGLDisplay display, EGLConfig config, int[] attrib_list) {
|
public EGLSurface eglCreatePbufferSurface(EGLDisplay display, EGLConfig config, int[] attrib_list) {
|
||||||
return new EGLSurfaceImpl( _eglCreatePbufferSurface(display, config, attrib_list) );
|
int eglSurfaceId = _eglCreatePbufferSurface(display, config, attrib_list);
|
||||||
|
if (eglSurfaceId == 0) {
|
||||||
|
return EGL10.EGL_NO_SURFACE;
|
||||||
|
}
|
||||||
|
return new EGLSurfaceImpl( eglSurfaceId );
|
||||||
}
|
}
|
||||||
|
|
||||||
public EGLSurface eglCreatePixmapSurface(EGLDisplay display, EGLConfig config, Object native_pixmap, int[] attrib_list) {
|
public EGLSurface eglCreatePixmapSurface(EGLDisplay display, EGLConfig config, Object native_pixmap, int[] attrib_list) {
|
||||||
EGLSurfaceImpl sur = new EGLSurfaceImpl();
|
EGLSurfaceImpl sur = new EGLSurfaceImpl();
|
||||||
_eglCreatePixmapSurface(sur, display, config, native_pixmap, attrib_list);
|
_eglCreatePixmapSurface(sur, display, config, native_pixmap, attrib_list);
|
||||||
|
if (sur.mEGLSurface == 0) {
|
||||||
|
return EGL10.EGL_NO_SURFACE;
|
||||||
|
}
|
||||||
return sur;
|
return sur;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,11 +84,18 @@ public class EGLImpl implements EGL10 {
|
|||||||
"eglCreateWindowSurface() can only be called with an instance of " +
|
"eglCreateWindowSurface() can only be called with an instance of " +
|
||||||
"SurfaceView or SurfaceHolder at the moment, this will be fixed later.");
|
"SurfaceView or SurfaceHolder at the moment, this will be fixed later.");
|
||||||
}
|
}
|
||||||
return new EGLSurfaceImpl( _eglCreateWindowSurface(display, config, sur, attrib_list) );
|
int eglSurfaceId = _eglCreateWindowSurface(display, config, sur, attrib_list);
|
||||||
|
if (eglSurfaceId == 0) {
|
||||||
|
return EGL10.EGL_NO_SURFACE;
|
||||||
|
}
|
||||||
|
return new EGLSurfaceImpl( eglSurfaceId );
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized EGLDisplay eglGetDisplay(Object native_display) {
|
public synchronized EGLDisplay eglGetDisplay(Object native_display) {
|
||||||
int value = _eglGetDisplay(native_display);
|
int value = _eglGetDisplay(native_display);
|
||||||
|
if (value == 0) {
|
||||||
|
return EGL10.EGL_NO_DISPLAY;
|
||||||
|
}
|
||||||
if (mDisplay.mEGLDisplay != value)
|
if (mDisplay.mEGLDisplay != value)
|
||||||
mDisplay = new EGLDisplayImpl(value);
|
mDisplay = new EGLDisplayImpl(value);
|
||||||
return mDisplay;
|
return mDisplay;
|
||||||
@ -85,6 +103,9 @@ public class EGLImpl implements EGL10 {
|
|||||||
|
|
||||||
public synchronized EGLContext eglGetCurrentContext() {
|
public synchronized EGLContext eglGetCurrentContext() {
|
||||||
int value = _eglGetCurrentContext();
|
int value = _eglGetCurrentContext();
|
||||||
|
if (value == 0) {
|
||||||
|
return EGL10.EGL_NO_CONTEXT;
|
||||||
|
}
|
||||||
if (mContext.mEGLContext != value)
|
if (mContext.mEGLContext != value)
|
||||||
mContext = new EGLContextImpl(value);
|
mContext = new EGLContextImpl(value);
|
||||||
return mContext;
|
return mContext;
|
||||||
@ -92,6 +113,9 @@ public class EGLImpl implements EGL10 {
|
|||||||
|
|
||||||
public synchronized EGLDisplay eglGetCurrentDisplay() {
|
public synchronized EGLDisplay eglGetCurrentDisplay() {
|
||||||
int value = _eglGetCurrentDisplay();
|
int value = _eglGetCurrentDisplay();
|
||||||
|
if (value == 0) {
|
||||||
|
return EGL10.EGL_NO_DISPLAY;
|
||||||
|
}
|
||||||
if (mDisplay.mEGLDisplay != value)
|
if (mDisplay.mEGLDisplay != value)
|
||||||
mDisplay = new EGLDisplayImpl(value);
|
mDisplay = new EGLDisplayImpl(value);
|
||||||
return mDisplay;
|
return mDisplay;
|
||||||
@ -99,6 +123,9 @@ public class EGLImpl implements EGL10 {
|
|||||||
|
|
||||||
public synchronized EGLSurface eglGetCurrentSurface(int readdraw) {
|
public synchronized EGLSurface eglGetCurrentSurface(int readdraw) {
|
||||||
int value = _eglGetCurrentSurface(readdraw);
|
int value = _eglGetCurrentSurface(readdraw);
|
||||||
|
if (value == 0) {
|
||||||
|
return EGL10.EGL_NO_SURFACE;
|
||||||
|
}
|
||||||
if (mSurface.mEGLSurface != value)
|
if (mSurface.mEGLSurface != value)
|
||||||
mSurface = new EGLSurfaceImpl(value);
|
mSurface = new EGLSurfaceImpl(value);
|
||||||
return mSurface;
|
return mSurface;
|
||||||
|
Reference in New Issue
Block a user