| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 #include "SkOSWindow_Android.h" | 8 #include "SkOSWindow_Android.h" |
| 9 | 9 |
| 10 #include <GLES/gl.h> | 10 #include <GLES/gl.h> |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 EGL_OPENGL_API, | 43 EGL_OPENGL_API, |
| 44 EGL_OPENGL_BIT, | 44 EGL_OPENGL_BIT, |
| 45 }, | 45 }, |
| 46 { // OpenGL ES. This seems to work for both ES2 and 3 (when available)
. | 46 { // OpenGL ES. This seems to work for both ES2 and 3 (when available)
. |
| 47 kEGLContextAttribsForOpenGLES, | 47 kEGLContextAttribsForOpenGLES, |
| 48 EGL_OPENGL_ES_API, | 48 EGL_OPENGL_ES_API, |
| 49 EGL_OPENGL_ES2_BIT, | 49 EGL_OPENGL_ES2_BIT, |
| 50 }, | 50 }, |
| 51 }; | 51 }; |
| 52 | 52 |
| 53 size_t apiLimit = SK_ARRAY_COUNT(kAPIs); | 53 EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); |
| 54 if (EGL_NO_DISPLAY == display) { |
| 55 return false; |
| 56 } |
| 54 | 57 |
| 55 for (size_t api = 0; api < apiLimit; ++api) { | 58 EGLint majorVersion; |
| 56 EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); | 59 EGLint minorVersion; |
| 60 if (!eglInitialize(display, &majorVersion, &minorVersion)) { |
| 61 return false; |
| 62 } |
| 57 | 63 |
| 58 EGLint majorVersion; | 64 for (size_t api = 0; api < SK_ARRAY_COUNT(kAPIs); ++api) { |
| 59 EGLint minorVersion; | 65 if (!eglBindAPI(kAPIs[api].fAPI)) { |
| 60 eglInitialize(display, &majorVersion, &minorVersion); | 66 continue; |
| 61 | 67 } |
| 62 #if 0 | 68 #if 0 |
| 63 SkDebugf("VENDOR: %s\n", eglQueryString(fDisplay, EGL_VENDOR)); | 69 SkDebugf("VENDOR: %s\n", eglQueryString(fDisplay, EGL_VENDOR)); |
| 64 SkDebugf("APIS: %s\n", eglQueryString(fDisplay, EGL_CLIENT_APIS)); | 70 SkDebugf("APIS: %s\n", eglQueryString(fDisplay, EGL_CLIENT_APIS)); |
| 65 SkDebugf("VERSION: %s\n", eglQueryString(fDisplay, EGL_VERSION)); | 71 SkDebugf("VERSION: %s\n", eglQueryString(fDisplay, EGL_VERSION)); |
| 66 SkDebugf("EXTENSIONS %s\n", eglQueryString(fDisplay, EGL_EXTENSIONS)); | 72 SkDebugf("EXTENSIONS %s\n", eglQueryString(fDisplay, EGL_EXTENSIONS)); |
| 67 #endif | 73 #endif |
| 68 | 74 |
| 69 if (!eglBindAPI(kAPIs[api].fAPI)) { | |
| 70 continue; | |
| 71 } | |
| 72 | |
| 73 const EGLint configAttribs[] = { | 75 const EGLint configAttribs[] = { |
| 74 EGL_SURFACE_TYPE, EGL_PBUFFER_BIT, | 76 EGL_SURFACE_TYPE, EGL_PBUFFER_BIT, |
| 75 EGL_RENDERABLE_TYPE, kAPIs[api].fRenderableTypeBit, | 77 EGL_RENDERABLE_TYPE, kAPIs[api].fRenderableTypeBit, |
| 76 EGL_RED_SIZE, 8, | 78 EGL_RED_SIZE, 8, |
| 77 EGL_GREEN_SIZE, 8, | 79 EGL_GREEN_SIZE, 8, |
| 78 EGL_BLUE_SIZE, 8, | 80 EGL_BLUE_SIZE, 8, |
| 79 EGL_ALPHA_SIZE, 8, | 81 EGL_ALPHA_SIZE, 8, |
| 80 EGL_NONE | 82 EGL_NONE |
| 81 }; | 83 }; |
| 82 | 84 |
| 83 EGLint format; | 85 EGLint format; |
| 84 EGLint numConfigs; | 86 EGLint numConfigs; |
| 85 EGLConfig config; | 87 EGLConfig config; |
| 86 EGLSurface surface; | 88 EGLSurface surface; |
| 87 EGLContext context; | 89 EGLContext context; |
| 88 | 90 |
| 89 /* Here, the application chooses the configuration it desires. In this | 91 /* Here, the application chooses the configuration it desires. In this |
| 90 * sample, we have a very simplified selection process, where we pick | 92 * sample, we have a very simplified selection process, where we pick |
| 91 * the first EGLConfig that matches our criteria */ | 93 * the first EGLConfig that matches our criteria */ |
| 92 eglChooseConfig(display, configAttribs, &config, 1, &numConfigs); | 94 if (!eglChooseConfig(display, configAttribs, &config, 1, &numConfigs) || |
| 95 numConfigs != 1) { |
| 96 continue; |
| 97 } |
| 93 | 98 |
| 94 /* EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is | 99 /* EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is |
| 95 * guaranteed to be accepted by ANativeWindow_setBuffersGeometry(). | 100 * guaranteed to be accepted by ANativeWindow_setBuffersGeometry(). |
| 96 * As soon as we picked a EGLConfig, we can safely reconfigure the | 101 * As soon as we picked a EGLConfig, we can safely reconfigure the |
| 97 * ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID. */ | 102 * ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID. */ |
| 98 eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format); | 103 if (!eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format))
{ |
| 104 continue; |
| 105 } |
| 99 | 106 |
| 100 ANativeWindow_setBuffersGeometry(fNativeWindow, 0, 0, format); | 107 ANativeWindow_setBuffersGeometry(fNativeWindow, 0, 0, format); |
| 101 | 108 |
| 102 surface = eglCreateWindowSurface(display, config, fNativeWindow, nullptr
); | 109 surface = eglCreateWindowSurface(display, config, fNativeWindow, nullptr
); |
| 110 if (EGL_NO_SURFACE == surface) { |
| 111 SkDebugf("eglCreateWindowSurface failed. EGL Error: 0x%08x\n", eglG
etError()); |
| 112 continue; |
| 113 } |
| 103 context = eglCreateContext(display, config, nullptr, kAPIs[api].fContext
Attribs); | 114 context = eglCreateContext(display, config, nullptr, kAPIs[api].fContext
Attribs); |
| 104 if (EGL_NO_CONTEXT == context) { | 115 if (EGL_NO_CONTEXT == context) { |
| 105 SkDebugf("eglCreateContext failed. EGL Error: 0x%08x\n", eglGetErro
r()); | 116 SkDebugf("eglCreateContext failed. EGL Error: 0x%08x\n", eglGetErro
r()); |
| 117 eglDestroySurface(display, surface); |
| 106 continue; | 118 continue; |
| 107 } | 119 } |
| 108 | 120 |
| 109 if (!eglMakeCurrent(display, surface, surface, context)) { | 121 if (!eglMakeCurrent(display, surface, surface, context)) { |
| 110 SkDebugf("eglMakeCurrent failed. EGL Error: 0x%08x\n", eglGetError(
)); | 122 SkDebugf("eglMakeCurrent failed. EGL Error: 0x%08x\n", eglGetError(
)); |
| 123 eglDestroyContext(display, context); |
| 124 eglDestroySurface(display, surface); |
| 111 continue; | 125 continue; |
| 112 } | 126 } |
| 113 | 127 |
| 114 fWindow.fDisplay = display; | 128 fWindow.fDisplay = display; |
| 115 fWindow.fContext = context; | 129 fWindow.fContext = context; |
| 116 fWindow.fSurface = surface; | 130 fWindow.fSurface = surface; |
| 131 break; |
| 117 } | 132 } |
| 118 | 133 |
| 119 if (fWindow.fDisplay && fWindow.fContext && fWindow.fSurface) { | 134 if (fWindow.fDisplay && fWindow.fContext && fWindow.fSurface) { |
| 120 EGLint w, h; | 135 EGLint w, h; |
| 121 eglQuerySurface(fWindow.fDisplay, fWindow.fSurface, EGL_WIDTH, &w); | 136 eglQuerySurface(fWindow.fDisplay, fWindow.fSurface, EGL_WIDTH, &w); |
| 122 eglQuerySurface(fWindow.fDisplay, fWindow.fSurface, EGL_HEIGHT, &h); | 137 eglQuerySurface(fWindow.fDisplay, fWindow.fSurface, EGL_HEIGHT, &h); |
| 123 | 138 |
| 124 glViewport(0, 0, w, h); | 139 glViewport(0, 0, w, h); |
| 125 glClearColor(0.0, 0, 0, 0.0); | 140 glClearColor(0.0, 0, 0, 0.0); |
| 126 glClearStencil(0); | 141 glClearStencil(0); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 | 193 |
| 179 /////////////////////////////////////////// | 194 /////////////////////////////////////////// |
| 180 /////////////// SkEvent impl ////////////// | 195 /////////////// SkEvent impl ////////////// |
| 181 /////////////////////////////////////////// | 196 /////////////////////////////////////////// |
| 182 | 197 |
| 183 void SkEvent::SignalQueueTimer(SkMSec ms) { | 198 void SkEvent::SignalQueueTimer(SkMSec ms) { |
| 184 } | 199 } |
| 185 | 200 |
| 186 void SkEvent::SignalNonEmptyQueue() { | 201 void SkEvent::SignalNonEmptyQueue() { |
| 187 } | 202 } |
| OLD | NEW |