From 6f7d9394ec69e9fb38ca5fc2caf6d2aef6f7442d Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Thu, 2 Jun 2011 14:17:28 -0700 Subject: Take advantage of EGL_BUFFER_PRESERVED on IMG. The IMG architecture does not support the EGL_SWAP_BEHAVIOR_PRESERVED_BIT in EGL configurations. This bit is used only to be able to change the EGL_SWAP_BEHAVIOR, which matters when the default behavior is not the one we want. However on IMG, the default swap behavior is the one we desire. Change-Id: Iff5980c97df9e41bc837e424baf83b8eadbb7161 --- core/jni/android_view_GLES20Canvas.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'core/jni') diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp index e2832ed..31988f7 100644 --- a/core/jni/android_view_GLES20Canvas.cpp +++ b/core/jni/android_view_GLES20Canvas.cpp @@ -91,11 +91,29 @@ static jboolean android_view_GLES20Canvas_preserveBackBuffer(JNIEnv* env, jobjec eglSurfaceAttrib(display, surface, EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED); EGLint error = eglGetError(); - RENDERER_LOGD("Could not enable buffer preserved swap behavior (%x)", error); + if (error != EGL_SUCCESS) { + RENDERER_LOGD("Could not enable buffer preserved swap behavior (%x)", error); + } return error == EGL_SUCCESS; } +static jboolean android_view_GLES20Canvas_isBackBufferPreserved(JNIEnv* env, jobject clazz) { + EGLDisplay display = eglGetCurrentDisplay(); + EGLSurface surface = eglGetCurrentSurface(EGL_DRAW); + EGLint value; + + eglGetError(); + eglQuerySurface(display, surface, EGL_SWAP_BEHAVIOR, &value); + + EGLint error = eglGetError(); + if (error != EGL_SUCCESS) { + RENDERER_LOGD("Could not query buffer preserved swap behavior (%x)", error); + } + + return error == EGL_SUCCESS && value == EGL_BUFFER_PRESERVED; +} + // ---------------------------------------------------------------------------- // Constructors // ---------------------------------------------------------------------------- @@ -676,7 +694,8 @@ static JNINativeMethod gMethods[] = { { "nIsAvailable", "()Z", (void*) android_view_GLES20Canvas_isAvailable }, #ifdef USE_OPENGL_RENDERER - { "nPreserveBackBuffer", "()Z", (void*) android_view_GLES20Canvas_preserveBackBuffer }, + { "nIsBackBufferPreserved", "()Z", (void*) android_view_GLES20Canvas_isBackBufferPreserved }, + { "nPreserveBackBuffer", "()Z", (void*) android_view_GLES20Canvas_preserveBackBuffer }, { "nCreateRenderer", "()I", (void*) android_view_GLES20Canvas_createRenderer }, { "nDestroyRenderer", "(I)V", (void*) android_view_GLES20Canvas_destroyRenderer }, -- cgit v1.1