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

Side by Side 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: Created 7 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 package com.skia; 8 package com.skia;
9 9
10 import javax.microedition.khronos.egl.EGL10;
11 import javax.microedition.khronos.egl.EGLConfig;
12 import javax.microedition.khronos.egl.EGLDisplay;
13 import javax.microedition.khronos.opengles.GL10;
14
10 import android.content.Context; 15 import android.content.Context;
16 import android.opengl.EGL14;
11 import android.opengl.GLSurfaceView; 17 import android.opengl.GLSurfaceView;
12 import android.view.MotionEvent; 18 import android.view.MotionEvent;
13 19
14 public class SkiaSampleView extends GLSurfaceView { 20 public class SkiaSampleView extends GLSurfaceView {
15 21
16 private final SkiaSampleRenderer mSampleRenderer; 22 private final SkiaSampleRenderer mSampleRenderer;
23 private boolean mRequestedOpenGLAPI; // true == use (desktop) OpenGL. false == use OpenGL ES.
24 private int mRequestedMSAASampleCount;
17 25
18 public SkiaSampleView(Context ctx) { 26 public SkiaSampleView(Context ctx, boolean useOpenGL, int msaaSampleCount) {
19 super(ctx); 27 super(ctx);
20 28
21 mSampleRenderer = new SkiaSampleRenderer(this); 29 mSampleRenderer = new SkiaSampleRenderer(this);
30 mRequestedOpenGLAPI = useOpenGL;
31 mRequestedMSAASampleCount = msaaSampleCount;
22 32
23 setEGLContextClientVersion(2); 33 setEGLContextClientVersion(2);
24 setEGLConfigChooser(8,8,8,8,0,8); 34 setEGLConfigChooser(new SampleViewEGLConfigChooser());
djsollen 2013/11/07 16:57:43 you may want do a runtime check of the android ver
Kimmo Kinnunen 2013/11/20 13:45:00 Done.
25 setRenderer(mSampleRenderer); 35 setRenderer(mSampleRenderer);
26 setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 36 setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
27 } 37 }
28 38
29 @Override 39 @Override
30 public boolean onTouchEvent(MotionEvent event) { 40 public boolean onTouchEvent(MotionEvent event) {
31 int count = event.getPointerCount(); 41 int count = event.getPointerCount();
32 for (int i = 0; i < count; i++) { 42 for (int i = 0; i < count; i++) {
33 final float x = event.getX(i); 43 final float x = event.getX(i);
34 final float y = event.getY(i); 44 final float y = event.getY(i);
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 } 165 }
156 166
157 public void saveToPDF() { 167 public void saveToPDF() {
158 queueEvent(new Runnable() { 168 queueEvent(new Runnable() {
159 @Override 169 @Override
160 public void run() { 170 public void run() {
161 mSampleRenderer.saveToPDF(); 171 mSampleRenderer.saveToPDF();
162 } 172 }
163 }); 173 });
164 } 174 }
175
176 public boolean getUsesOpenGLAPI() {
177 return mRequestedOpenGLAPI;
178 }
179
180 public int getMSAASampleCount() {
181 // Currently we do not check if the request succeeded, because there is
182 // no good API to identify which EGLConfig was selected and used by the
183 // GLSurfaceView.
184 return mRequestedMSAASampleCount;
185 }
186
187 private class SampleViewEGLConfigChooser implements GLSurfaceView.EGLConfigC hooser {
djsollen 2013/11/07 16:57:43 this class should only be instantiated for devices
Kimmo Kinnunen 2013/11/20 13:45:00 Done.
188 private int[] mValue;
189
190 @Override
191 public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
192 mValue = new int[1];
193
194 int glAPIToTry;
195
196 if (mRequestedOpenGLAPI) {
197 glAPIToTry = EGL14.EGL_OPENGL_API;
198 } else {
199 glAPIToTry = EGL14.EGL_OPENGL_ES_API;
200 }
201
202 int numConfigs = 0;
203 int[] configSpec = null;
204
205 do {
206 EGL14.eglBindAPI(glAPIToTry);
207
208 int renderableType;
209 if (glAPIToTry == EGL14.EGL_OPENGL_API) {
210 renderableType = EGL14.EGL_OPENGL_ES2_BIT;
211
212 // If this API does not work, try ES next.
213 glAPIToTry = EGL14.EGL_OPENGL_ES_API;
214 } else {
215 renderableType = EGL14.EGL_OPENGL_BIT;
216 }
217
218
219 if (mRequestedMSAASampleCount > 0) {
220 configSpec = new int[] {
221 EGL10.EGL_RED_SIZE, 8,
222 EGL10.EGL_GREEN_SIZE, 8,
223 EGL10.EGL_BLUE_SIZE, 8,
224 EGL10.EGL_ALPHA_SIZE, 8,
225 EGL10.EGL_DEPTH_SIZE, 0,
226 EGL10.EGL_STENCIL_SIZE, 8,
227 EGL10.EGL_RENDERABLE_TYPE, renderableType,
228 EGL10.EGL_SAMPLE_BUFFERS, 1,
229 EGL10.EGL_SAMPLES, mRequestedMSAASampleCount,
230 EGL10.EGL_NONE
231 };
232
233 if (!egl.eglChooseConfig(display, configSpec, null, 0, mValu e)) {
234 throw new IllegalArgumentException("Could not get MSAA c ontext count");
235 }
236
237 numConfigs = mValue[0];
238 }
239
240 if (numConfigs <= 0) {
241 // Try without multisampling.
242 configSpec = new int[] {
243 EGL10.EGL_RED_SIZE, 8,
244 EGL10.EGL_GREEN_SIZE, 8,
245 EGL10.EGL_BLUE_SIZE, 8,
246 EGL10.EGL_ALPHA_SIZE, 8,
247 EGL10.EGL_DEPTH_SIZE, 0,
248 EGL10.EGL_STENCIL_SIZE, 8,
249 EGL10.EGL_RENDERABLE_TYPE, renderableType,
250 EGL10.EGL_NONE
251 };
252
253 if (!egl.eglChooseConfig(display, configSpec, null, 0, mValu e)) {
254 throw new IllegalArgumentException("Could not get non-MS AA context count");
255 }
256 numConfigs = mValue[0];
257 }
258
259 } while (glAPIToTry != EGL14.EGL_OPENGL_ES_API && numConfigs == 0);
260
261 if (numConfigs <= 0) {
262 throw new IllegalArgumentException("No configs match configSpec" );
263 }
264
265 // Get all matching configurations.
266 EGLConfig[] configs = new EGLConfig[numConfigs];
267 if (!egl.eglChooseConfig(display, configSpec, configs, numConfigs, m Value)) {
268 throw new IllegalArgumentException("Could not get config data");
269 }
270
271 for (int i = 0; i < configs.length; ++i) {
272 EGLConfig config = configs[i];
273 if (findConfigAttrib(egl, display, config , EGL10.EGL_RED_SIZE, 0) == 8 &&
274 findConfigAttrib(egl, display, config, EGL10.EGL_BLUE_SI ZE, 0) == 8 &&
275 findConfigAttrib(egl, display, config, EGL10.EGL_GREEN_S IZE, 0) == 8 &&
276 findConfigAttrib(egl, display, config, EGL10.EGL_ALPHA_S IZE, 0) == 8 &&
277 findConfigAttrib(egl, display, config, EGL10.EGL_STENCIL _SIZE, 0) == 8) {
278 return config;
279 }
280 }
281
282 throw new IllegalArgumentException("Could not find suitable EGL conf ig");
283 }
284
285 private int findConfigAttrib(EGL10 egl, EGLDisplay display,
286 EGLConfig config, int attribute, int defaultValue) {
287 if (egl.eglGetConfigAttrib(display, config, attribute, mValue)) {
288 return mValue[0];
289 }
290 return defaultValue;
291 }
292
293 }
165 } 294 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698