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> |
11 | 11 |
12 SkOSWindow::SkOSWindow(void* hwnd) { | 12 SkOSWindow::SkOSWindow(void* hwnd) { |
13 fWindow.fDisplay = EGL_NO_DISPLAY; | 13 fWindow.fDisplay = EGL_NO_DISPLAY; |
14 fWindow.fContext = EGL_NO_CONTEXT; | 14 fWindow.fContext = EGL_NO_CONTEXT; |
15 fWindow.fSurface = EGL_NO_SURFACE; | 15 fWindow.fSurface = EGL_NO_SURFACE; |
16 fNativeWindow = (ANativeWindow*)hwnd; | 16 fNativeWindow = (ANativeWindow*)hwnd; |
17 fDestroyRequested = false; | 17 fDestroyRequested = false; |
18 } | 18 } |
19 | 19 |
20 SkOSWindow::~SkOSWindow() { | 20 SkOSWindow::~SkOSWindow() { |
21 if (fWindow.fDisplay != EGL_NO_DISPLAY) { | 21 this->detach(); |
22 eglMakeCurrent(fWindow.fDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_
CONTEXT); | |
23 if (fWindow.fContext != EGL_NO_CONTEXT) { | |
24 eglDestroyContext(fWindow.fDisplay, fWindow.fContext); | |
25 } | |
26 if (fWindow.fSurface != EGL_NO_SURFACE) { | |
27 eglDestroySurface(fWindow.fDisplay, fWindow.fSurface); | |
28 } | |
29 eglTerminate(fWindow.fDisplay); | |
30 } | |
31 fWindow.fDisplay = EGL_NO_DISPLAY; | |
32 fWindow.fContext = EGL_NO_CONTEXT; | |
33 fWindow.fSurface = EGL_NO_SURFACE; | |
34 } | 22 } |
35 | 23 |
36 bool SkOSWindow::attach(SkBackEndTypes attachType, | 24 bool SkOSWindow::attach(SkBackEndTypes attachType, |
37 int /*msaaSampleCount*/, | 25 int /*msaaSampleCount*/, |
38 AttachmentInfo* info) { | 26 AttachmentInfo* info) { |
39 static const EGLint kEGLContextAttribsForOpenGL[] = { | 27 static const EGLint kEGLContextAttribsForOpenGL[] = { |
40 EGL_NONE | 28 EGL_NONE |
41 }; | 29 }; |
42 | 30 |
43 static const EGLint kEGLContextAttribsForOpenGLES[] = { | 31 static const EGLint kEGLContextAttribsForOpenGLES[] = { |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 | 128 |
141 // We retrieve the fullscreen width and height | 129 // We retrieve the fullscreen width and height |
142 this->setSize((SkScalar)w, (SkScalar)h); | 130 this->setSize((SkScalar)w, (SkScalar)h); |
143 return true; | 131 return true; |
144 } else { | 132 } else { |
145 return false; | 133 return false; |
146 } | 134 } |
147 } | 135 } |
148 | 136 |
149 void SkOSWindow::detach() { | 137 void SkOSWindow::detach() { |
150 fDestroyRequested = true; | 138 if (fWindow.fDisplay != EGL_NO_DISPLAY) { |
| 139 eglMakeCurrent(fWindow.fDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_
CONTEXT); |
| 140 if (fWindow.fContext != EGL_NO_CONTEXT) { |
| 141 eglDestroyContext(fWindow.fDisplay, fWindow.fContext); |
| 142 } |
| 143 if (fWindow.fSurface != EGL_NO_SURFACE) { |
| 144 eglDestroySurface(fWindow.fDisplay, fWindow.fSurface); |
| 145 } |
| 146 eglTerminate(fWindow.fDisplay); |
| 147 } |
| 148 fWindow.fDisplay = EGL_NO_DISPLAY; |
| 149 fWindow.fContext = EGL_NO_CONTEXT; |
| 150 fWindow.fSurface = EGL_NO_SURFACE; |
151 } | 151 } |
152 | 152 |
153 void SkOSWindow::present() { | 153 void SkOSWindow::present() { |
154 if (fWindow.fDisplay != EGL_NO_DISPLAY && fWindow.fContext != EGL_NO_CONTEXT
) { | 154 if (fWindow.fDisplay != EGL_NO_DISPLAY && fWindow.fContext != EGL_NO_CONTEXT
) { |
155 eglSwapBuffers(fWindow.fDisplay, fWindow.fSurface); | 155 eglSwapBuffers(fWindow.fDisplay, fWindow.fSurface); |
156 } | 156 } |
157 } | 157 } |
158 | 158 |
159 void SkOSWindow::closeWindow() { | 159 void SkOSWindow::closeWindow() { |
160 fDestroyRequested = true; | 160 fDestroyRequested = true; |
(...skipping 17 matching lines...) Expand all Loading... |
178 | 178 |
179 /////////////////////////////////////////// | 179 /////////////////////////////////////////// |
180 /////////////// SkEvent impl ////////////// | 180 /////////////// SkEvent impl ////////////// |
181 /////////////////////////////////////////// | 181 /////////////////////////////////////////// |
182 | 182 |
183 void SkEvent::SignalQueueTimer(SkMSec ms) { | 183 void SkEvent::SignalQueueTimer(SkMSec ms) { |
184 } | 184 } |
185 | 185 |
186 void SkEvent::SignalNonEmptyQueue() { | 186 void SkEvent::SignalNonEmptyQueue() { |
187 } | 187 } |
OLD | NEW |