Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Unified Diff: platform_tools/android/app/src/com/skia/SkiaSampleView.java

Issue 60273006: Support MSAA4 and (non-ES) OpenGL in Android SampleApp (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: rebase now that api level changes are merged Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « platform_tools/android/app/src/com/skia/SkiaSampleRenderer.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: platform_tools/android/app/src/com/skia/SkiaSampleView.java
diff --git a/platform_tools/android/app/src/com/skia/SkiaSampleView.java b/platform_tools/android/app/src/com/skia/SkiaSampleView.java
index 0d493c96df6886b8220dcec62ef509f6ea6e027e..b1f7318319f8beebc984f23883c381945e33121a 100644
--- a/platform_tools/android/app/src/com/skia/SkiaSampleView.java
+++ b/platform_tools/android/app/src/com/skia/SkiaSampleView.java
@@ -7,21 +7,36 @@
package com.skia;
+import javax.microedition.khronos.egl.EGL10;
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.egl.EGLDisplay;
+import javax.microedition.khronos.opengles.GL10;
+
import android.content.Context;
+import android.opengl.EGL14;
import android.opengl.GLSurfaceView;
+import android.os.Build;
import android.view.MotionEvent;
public class SkiaSampleView extends GLSurfaceView {
private final SkiaSampleRenderer mSampleRenderer;
+ private boolean mRequestedOpenGLAPI; // true == use (desktop) OpenGL. false == use OpenGL ES.
+ private int mRequestedMSAASampleCount;
- public SkiaSampleView(Context ctx) {
+ public SkiaSampleView(Context ctx, boolean useOpenGL, int msaaSampleCount) {
super(ctx);
mSampleRenderer = new SkiaSampleRenderer(this);
+ mRequestedMSAASampleCount = msaaSampleCount;
setEGLContextClientVersion(2);
- setEGLConfigChooser(8,8,8,8,0,8);
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ setEGLConfigChooser(8, 8, 8, 8, 0, 8);
+ } else {
+ mRequestedOpenGLAPI = useOpenGL;
+ setEGLConfigChooser(new SampleViewEGLConfigChooser());
+ }
setRenderer(mSampleRenderer);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
@@ -162,4 +177,120 @@ public class SkiaSampleView extends GLSurfaceView {
}
});
}
+
+ public boolean getUsesOpenGLAPI() {
+ return mRequestedOpenGLAPI;
+ }
+
+ public int getMSAASampleCount() {
+ return mSampleRenderer.getMSAASampleCount();
+ }
+
+ private class SampleViewEGLConfigChooser implements GLSurfaceView.EGLConfigChooser {
+ private int[] mValue;
+
+ @Override
+ public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
+ mValue = new int[1];
+
+ int glAPIToTry;
+
+ if (mRequestedOpenGLAPI) {
+ glAPIToTry = EGL14.EGL_OPENGL_API;
+ } else {
+ glAPIToTry = EGL14.EGL_OPENGL_ES_API;
+ }
+
+ int numConfigs = 0;
+ int[] configSpec = null;
+
+ do {
+ EGL14.eglBindAPI(glAPIToTry);
+
+ int renderableType;
+ if (glAPIToTry == EGL14.EGL_OPENGL_API) {
+ renderableType = EGL14.EGL_OPENGL_ES2_BIT;
+
+ // If this API does not work, try ES next.
+ glAPIToTry = EGL14.EGL_OPENGL_ES_API;
+ } else {
+ renderableType = EGL14.EGL_OPENGL_BIT;
+ }
+
+
+ if (mRequestedMSAASampleCount > 0) {
+ configSpec = new int[] {
+ EGL10.EGL_RED_SIZE, 8,
+ EGL10.EGL_GREEN_SIZE, 8,
+ EGL10.EGL_BLUE_SIZE, 8,
+ EGL10.EGL_ALPHA_SIZE, 8,
+ EGL10.EGL_DEPTH_SIZE, 0,
+ EGL10.EGL_STENCIL_SIZE, 8,
+ EGL10.EGL_RENDERABLE_TYPE, renderableType,
+ EGL10.EGL_SAMPLE_BUFFERS, 1,
+ EGL10.EGL_SAMPLES, mRequestedMSAASampleCount,
+ EGL10.EGL_NONE
+ };
+
+ if (!egl.eglChooseConfig(display, configSpec, null, 0, mValue)) {
+ throw new IllegalArgumentException("Could not get MSAA context count");
+ }
+
+ numConfigs = mValue[0];
+ }
+
+ if (numConfigs <= 0) {
+ // Try without multisampling.
+ configSpec = new int[] {
+ EGL10.EGL_RED_SIZE, 8,
+ EGL10.EGL_GREEN_SIZE, 8,
+ EGL10.EGL_BLUE_SIZE, 8,
+ EGL10.EGL_ALPHA_SIZE, 8,
+ EGL10.EGL_DEPTH_SIZE, 0,
+ EGL10.EGL_STENCIL_SIZE, 8,
+ EGL10.EGL_RENDERABLE_TYPE, renderableType,
+ EGL10.EGL_NONE
+ };
+
+ if (!egl.eglChooseConfig(display, configSpec, null, 0, mValue)) {
+ throw new IllegalArgumentException("Could not get non-MSAA context count");
+ }
+ numConfigs = mValue[0];
+ }
+
+ } while (glAPIToTry != EGL14.EGL_OPENGL_ES_API && numConfigs == 0);
+
+ if (numConfigs <= 0) {
+ throw new IllegalArgumentException("No configs match configSpec");
+ }
+
+ // Get all matching configurations.
+ EGLConfig[] configs = new EGLConfig[numConfigs];
+ if (!egl.eglChooseConfig(display, configSpec, configs, numConfigs, mValue)) {
+ throw new IllegalArgumentException("Could not get config data");
+ }
+
+ for (int i = 0; i < configs.length; ++i) {
+ EGLConfig config = configs[i];
+ if (findConfigAttrib(egl, display, config , EGL10.EGL_RED_SIZE, 0) == 8 &&
+ findConfigAttrib(egl, display, config, EGL10.EGL_BLUE_SIZE, 0) == 8 &&
+ findConfigAttrib(egl, display, config, EGL10.EGL_GREEN_SIZE, 0) == 8 &&
+ findConfigAttrib(egl, display, config, EGL10.EGL_ALPHA_SIZE, 0) == 8 &&
+ findConfigAttrib(egl, display, config, EGL10.EGL_STENCIL_SIZE, 0) == 8) {
+ return config;
+ }
+ }
+
+ throw new IllegalArgumentException("Could not find suitable EGL config");
+ }
+
+ private int findConfigAttrib(EGL10 egl, EGLDisplay display,
+ EGLConfig config, int attribute, int defaultValue) {
+ if (egl.eglGetConfigAttrib(display, config, attribute, mValue)) {
+ return mValue[0];
+ }
+ return defaultValue;
+ }
+
+ }
}
« no previous file with comments | « platform_tools/android/app/src/com/skia/SkiaSampleRenderer.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698