| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "gl/angle/SkANGLEGLContext.h" | 9 #include "gl/angle/SkANGLEGLContext.h" |
| 10 | 10 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 static const EGLint surfaceAttribs[] = { | 89 static const EGLint surfaceAttribs[] = { |
| 90 EGL_WIDTH, 1, | 90 EGL_WIDTH, 1, |
| 91 EGL_HEIGHT, 1, | 91 EGL_HEIGHT, 1, |
| 92 EGL_NONE | 92 EGL_NONE |
| 93 }; | 93 }; |
| 94 | 94 |
| 95 fSurface = eglCreatePbufferSurface(fDisplay, surfaceConfig, surfaceAttribs); | 95 fSurface = eglCreatePbufferSurface(fDisplay, surfaceConfig, surfaceAttribs); |
| 96 | 96 |
| 97 eglMakeCurrent(fDisplay, fSurface, fSurface, fContext); | 97 eglMakeCurrent(fDisplay, fSurface, fSurface, fContext); |
| 98 | 98 |
| 99 fGL.reset(GrGLCreateANGLEInterface()); | 99 SkAutoTUnref<const GrGLInterface> gl(GrGLCreateANGLEInterface()); |
| 100 if (NULL == fGL.get()) { | 100 if (NULL == gl.get()) { |
| 101 SkDebugf("Could not create ANGLE GL interface!\n"); | 101 SkDebugf("Could not create ANGLE GL interface!\n"); |
| 102 this->destroyGLContext(); | 102 this->destroyGLContext(); |
| 103 return; | 103 return; |
| 104 } | 104 } |
| 105 if (!fGL->validate()) { | 105 if (!gl->validate()) { |
| 106 SkDebugf("Could not validate ANGLE GL interface!\n"); | 106 SkDebugf("Could not validate ANGLE GL interface!\n"); |
| 107 this->destroyGLContext(); | 107 this->destroyGLContext(); |
| 108 return; | 108 return; |
| 109 } | 109 } |
| 110 |
| 111 this->init(gl.detach()); |
| 110 } | 112 } |
| 111 | 113 |
| 112 SkANGLEGLContext::~SkANGLEGLContext() { | 114 SkANGLEGLContext::~SkANGLEGLContext() { |
| 115 this->teardown(); |
| 113 this->destroyGLContext(); | 116 this->destroyGLContext(); |
| 114 } | 117 } |
| 115 | 118 |
| 116 void SkANGLEGLContext::destroyGLContext() { | 119 void SkANGLEGLContext::destroyGLContext() { |
| 117 fGL.reset(NULL); | |
| 118 if (fDisplay) { | 120 if (fDisplay) { |
| 119 eglMakeCurrent(fDisplay, 0, 0, 0); | 121 eglMakeCurrent(fDisplay, 0, 0, 0); |
| 120 | 122 |
| 121 if (fContext) { | 123 if (fContext) { |
| 122 eglDestroyContext(fDisplay, fContext); | 124 eglDestroyContext(fDisplay, fContext); |
| 123 fContext = EGL_NO_CONTEXT; | 125 fContext = EGL_NO_CONTEXT; |
| 124 } | 126 } |
| 125 | 127 |
| 126 if (fSurface) { | 128 if (fSurface) { |
| 127 eglDestroySurface(fDisplay, fSurface); | 129 eglDestroySurface(fDisplay, fSurface); |
| 128 fSurface = EGL_NO_SURFACE; | 130 fSurface = EGL_NO_SURFACE; |
| 129 } | 131 } |
| 130 | 132 |
| 131 //TODO should we close the display? | 133 //TODO should we close the display? |
| 132 fDisplay = EGL_NO_DISPLAY; | 134 fDisplay = EGL_NO_DISPLAY; |
| 133 } | 135 } |
| 134 } | 136 } |
| 135 | 137 |
| 136 void SkANGLEGLContext::makeCurrent() const { | 138 void SkANGLEGLContext::onPlatformMakeCurrent() const { |
| 137 if (!eglMakeCurrent(fDisplay, fSurface, fSurface, fContext)) { | 139 if (!eglMakeCurrent(fDisplay, fSurface, fSurface, fContext)) { |
| 138 SkDebugf("Could not set the context.\n"); | 140 SkDebugf("Could not set the context.\n"); |
| 139 } | 141 } |
| 140 } | 142 } |
| 141 | 143 |
| 142 void SkANGLEGLContext::swapBuffers() const { | 144 void SkANGLEGLContext::onPlatformSwapBuffers() const { |
| 143 if (!eglSwapBuffers(fDisplay, fSurface)) { | 145 if (!eglSwapBuffers(fDisplay, fSurface)) { |
| 144 SkDebugf("Could not complete eglSwapBuffers.\n"); | 146 SkDebugf("Could not complete eglSwapBuffers.\n"); |
| 145 } | 147 } |
| 146 } | 148 } |
| 149 |
| 150 GrGLFuncPtr SkANGLEGLContext::onPlatformGetProcAddress(const char* name) const { |
| 151 return eglGetProcAddress(name); |
| 152 } |
| OLD | NEW |