diff options
author | Romain Guy <romainguy@google.com> | 2012-07-24 16:24:56 -0700 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2012-07-24 16:41:21 -0700 |
commit | 786fc93d71b833ab6b02b0c7ea5e30f25cceeedf (patch) | |
tree | 7a33afdfc52077e9f9665acc6d6072cb23e3d9d2 | |
parent | d8031f0e8c0977ff04aeb2164afacb2434dc0775 (diff) | |
download | frameworks_base-786fc93d71b833ab6b02b0c7ea5e30f25cceeedf.zip frameworks_base-786fc93d71b833ab6b02b0c7ea5e30f25cceeedf.tar.gz frameworks_base-786fc93d71b833ab6b02b0c7ea5e30f25cceeedf.tar.bz2 |
Make HardwareRenderer able to target generic Surface objects
Change-Id: I4b7199a1eb30e0df354ae12c4819adc69db5df40
4 files changed, 34 insertions, 33 deletions
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index dab48b1..8236cd7 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -197,18 +197,18 @@ public abstract class HardwareRenderer { /** * Initializes the hardware renderer for the specified surface. * - * @param holder The holder for the surface to hardware accelerate. + * @param surface The surface to hardware accelerate * * @return True if the initialization was successful, false otherwise. */ - abstract boolean initialize(SurfaceHolder holder) throws Surface.OutOfResourcesException; + abstract boolean initialize(Surface surface) throws Surface.OutOfResourcesException; /** * Updates the hardware renderer for the specified surface. - * - * @param holder The holder for the surface to hardware accelerate + * + * @param surface The surface to hardware accelerate */ - abstract void updateSurface(SurfaceHolder holder) throws Surface.OutOfResourcesException; + abstract void updateSurface(Surface surface) throws Surface.OutOfResourcesException; /** * Destroys the layers used by the specified view hierarchy. @@ -228,10 +228,10 @@ public abstract class HardwareRenderer { /** * This method should be invoked whenever the current hardware renderer * context should be reset. - * - * @param holder The holder for the surface to hardware accelerate + * + * @param surface The surface to hardware accelerate */ - abstract void invalidate(SurfaceHolder holder); + abstract void invalidate(Surface surface); /** * This method should be invoked to ensure the hardware renderer is in @@ -474,14 +474,14 @@ public abstract class HardwareRenderer { * * @param width The width of the drawing surface. * @param height The height of the drawing surface. - * @param holder The target surface + * @param surface The surface to hardware accelerate */ - void initializeIfNeeded(int width, int height, SurfaceHolder holder) + void initializeIfNeeded(int width, int height, Surface surface) throws Surface.OutOfResourcesException { if (isRequested()) { // We lost the gl context, so recreate it. if (!isEnabled()) { - if (initialize(holder)) { + if (initialize(surface)) { setup(width, height); } } @@ -742,10 +742,10 @@ public abstract class HardwareRenderer { } @Override - boolean initialize(SurfaceHolder holder) throws Surface.OutOfResourcesException { + boolean initialize(Surface surface) throws Surface.OutOfResourcesException { if (isRequested() && !isEnabled()) { initializeEgl(); - mGl = createEglSurface(holder); + mGl = createEglSurface(surface); mDestroyed = false; if (mGl != null) { @@ -771,9 +771,9 @@ public abstract class HardwareRenderer { } @Override - void updateSurface(SurfaceHolder holder) throws Surface.OutOfResourcesException { + void updateSurface(Surface surface) throws Surface.OutOfResourcesException { if (isRequested() && isEnabled()) { - createEglSurface(holder); + createEglSurface(surface); } } @@ -888,7 +888,7 @@ public abstract class HardwareRenderer { Log.d(LOG_TAG, " SURFACE_TYPE = 0x" + Integer.toHexString(value[0])); } - GL createEglSurface(SurfaceHolder holder) throws Surface.OutOfResourcesException { + GL createEglSurface(Surface surface) throws Surface.OutOfResourcesException { // Check preconditions. if (sEgl == null) { throw new RuntimeException("egl not initialized"); @@ -908,7 +908,7 @@ public abstract class HardwareRenderer { destroySurface(); // Create an EGL surface we can render into. - if (!createSurface(holder)) { + if (!createSurface(surface)) { return null; } @@ -982,7 +982,7 @@ public abstract class HardwareRenderer { } @Override - void invalidate(SurfaceHolder holder) { + void invalidate(Surface surface) { // Cancels any existing buffer to ensure we'll get a buffer // of the right size before we call eglSwapBuffers sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); @@ -993,8 +993,8 @@ public abstract class HardwareRenderer { setEnabled(false); } - if (holder.getSurface().isValid()) { - if (!createSurface(holder)) { + if (surface.isValid()) { + if (!createSurface(surface)) { return; } @@ -1006,8 +1006,8 @@ public abstract class HardwareRenderer { } } - private boolean createSurface(SurfaceHolder holder) { - mEglSurface = sEgl.eglCreateWindowSurface(sEglDisplay, sEglConfig, holder, null); + private boolean createSurface(Surface surface) { + mEglSurface = sEgl.eglCreateWindowSurface(sEglDisplay, sEglConfig, surface, null); if (mEglSurface == null || mEglSurface == EGL_NO_SURFACE) { int error = sEgl.eglGetError(); diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index fb0a8a4..fafddaf 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1502,7 +1502,8 @@ public final class ViewRootImpl implements ViewParent, if (mAttachInfo.mHardwareRenderer != null) { try { - hwInitialized = mAttachInfo.mHardwareRenderer.initialize(mHolder); + hwInitialized = mAttachInfo.mHardwareRenderer.initialize( + mHolder.getSurface()); } catch (Surface.OutOfResourcesException e) { Log.e(TAG, "OutOfResourcesException initializing HW surface", e); try { @@ -1535,7 +1536,7 @@ public final class ViewRootImpl implements ViewParent, mSurfaceHolder == null && mAttachInfo.mHardwareRenderer != null) { mFullRedrawNeeded = true; try { - mAttachInfo.mHardwareRenderer.updateSurface(mHolder); + mAttachInfo.mHardwareRenderer.updateSurface(mHolder.getSurface()); } catch (Surface.OutOfResourcesException e) { Log.e(TAG, "OutOfResourcesException updating HW surface", e); try { @@ -1626,7 +1627,7 @@ public final class ViewRootImpl implements ViewParent, mHeight != mAttachInfo.mHardwareRenderer.getHeight()) { mAttachInfo.mHardwareRenderer.setup(mWidth, mHeight); if (!hwInitialized) { - mAttachInfo.mHardwareRenderer.invalidate(mHolder); + mAttachInfo.mHardwareRenderer.invalidate(mHolder.getSurface()); } } } @@ -2889,7 +2890,7 @@ public final class ViewRootImpl implements ViewParent, mFullRedrawNeeded = true; try { mAttachInfo.mHardwareRenderer.initializeIfNeeded(mWidth, mHeight, - mHolder); + mHolder.getSurface()); } catch (Surface.OutOfResourcesException e) { Log.e(TAG, "OutOfResourcesException locking surface", e); try { diff --git a/opengl/java/com/google/android/gles_jni/EGLImpl.java b/opengl/java/com/google/android/gles_jni/EGLImpl.java index 6992019..64a54c2 100644 --- a/opengl/java/com/google/android/gles_jni/EGLImpl.java +++ b/opengl/java/com/google/android/gles_jni/EGLImpl.java @@ -83,6 +83,8 @@ public class EGLImpl implements EGL10 { } else if (native_window instanceof SurfaceHolder) { SurfaceHolder holder = (SurfaceHolder)native_window; sur = holder.getSurface(); + } else if (native_window instanceof Surface) { + sur = (Surface) native_window; } int eglSurfaceId; @@ -94,8 +96,7 @@ public class EGLImpl implements EGL10 { } else { throw new java.lang.UnsupportedOperationException( "eglCreateWindowSurface() can only be called with an instance of " + - "SurfaceView, SurfaceHolder or SurfaceTexture at the moment, " + - "this will be fixed later."); + "Surface, SurfaceView, SurfaceHolder or SurfaceTexture at the moment."); } if (eglSurfaceId == 0) { diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java index 0e75b80..733e44f 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/GLTextureViewActivity.java @@ -22,7 +22,6 @@ import android.app.Activity; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.Matrix; import android.graphics.SurfaceTexture; import android.opengl.GLUtils; import android.os.Bundle; @@ -278,7 +277,7 @@ public class GLTextureViewActivity extends Activity implements TextureView.Surfa return texture; } - private int buildProgram(String vertex, String fragment) { + private static int buildProgram(String vertex, String fragment) { int vertexShader = buildShader(vertex, GL_VERTEX_SHADER); if (vertexShader == 0) return 0; @@ -309,7 +308,7 @@ public class GLTextureViewActivity extends Activity implements TextureView.Surfa return program; } - private int buildShader(String source, int type) { + private static int buildShader(String source, int type) { int shader = glCreateShader(type); glShaderSource(shader, source); @@ -337,7 +336,7 @@ public class GLTextureViewActivity extends Activity implements TextureView.Surfa } } - private void checkGlError() { + private static void checkGlError() { int error = glGetError(); if (error != GL_NO_ERROR) { Log.w(LOG_TAG, "GL error = 0x" + Integer.toHexString(error)); @@ -420,7 +419,7 @@ public class GLTextureViewActivity extends Activity implements TextureView.Surfa return null; } - private int[] getConfig() { + private static int[] getConfig() { return new int[] { EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL10.EGL_RED_SIZE, 8, |