Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/gl/gl_context_egl.h" | 5 #include "ui/gl/gl_context_egl.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 22 | 22 |
| 23 using ui::GetLastEGLErrorString; | 23 using ui::GetLastEGLErrorString; |
| 24 | 24 |
| 25 namespace gfx { | 25 namespace gfx { |
| 26 | 26 |
| 27 GLContextEGL::GLContextEGL(GLShareGroup* share_group) | 27 GLContextEGL::GLContextEGL(GLShareGroup* share_group) |
| 28 : GLContextReal(share_group), | 28 : GLContextReal(share_group), |
| 29 context_(NULL), | 29 context_(NULL), |
| 30 display_(NULL), | 30 display_(NULL), |
| 31 config_(NULL), | 31 config_(NULL), |
| 32 unbind_fbo_on_makecurrent_(false) { | 32 unbind_fbo_on_makecurrent_(false), |
| 33 is_surfaceless_context_(false) { | |
| 33 } | 34 } |
| 34 | 35 |
| 35 bool GLContextEGL::Initialize( | 36 bool GLContextEGL::Initialize( |
| 36 GLSurface* compatible_surface, GpuPreference gpu_preference) { | 37 GLSurface* compatible_surface, GpuPreference gpu_preference) { |
| 37 DCHECK(compatible_surface); | 38 DCHECK(compatible_surface); |
| 38 DCHECK(!context_); | 39 DCHECK(!context_); |
| 39 | 40 |
| 40 static const EGLint kContextAttributes[] = { | 41 static const EGLint kContextAttributes[] = { |
| 41 EGL_CONTEXT_CLIENT_VERSION, 2, | 42 EGL_CONTEXT_CLIENT_VERSION, 2, |
| 42 EGL_NONE | 43 EGL_NONE |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 67 config_, | 68 config_, |
| 68 share_group() ? share_group()->GetHandle() : NULL, | 69 share_group() ? share_group()->GetHandle() : NULL, |
| 69 context_attributes); | 70 context_attributes); |
| 70 | 71 |
| 71 if (!context_) { | 72 if (!context_) { |
| 72 LOG(ERROR) << "eglCreateContext failed with error " | 73 LOG(ERROR) << "eglCreateContext failed with error " |
| 73 << GetLastEGLErrorString(); | 74 << GetLastEGLErrorString(); |
| 74 return false; | 75 return false; |
| 75 } | 76 } |
| 76 | 77 |
| 78 is_surfaceless_context_ = compatible_surface->IsSurfaceless(); | |
| 79 | |
| 77 return true; | 80 return true; |
| 78 } | 81 } |
| 79 | 82 |
| 80 void GLContextEGL::Destroy() { | 83 void GLContextEGL::Destroy() { |
| 81 if (context_) { | 84 if (context_) { |
| 82 if (!eglDestroyContext(display_, context_)) { | 85 if (!eglDestroyContext(display_, context_)) { |
| 83 LOG(ERROR) << "eglDestroyContext failed with error " | 86 LOG(ERROR) << "eglDestroyContext failed with error " |
| 84 << GetLastEGLErrorString(); | 87 << GetLastEGLErrorString(); |
| 85 } | 88 } |
| 86 | 89 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 118 SetCurrent(surface); | 121 SetCurrent(surface); |
| 119 if (!InitializeDynamicBindings()) { | 122 if (!InitializeDynamicBindings()) { |
| 120 return false; | 123 return false; |
| 121 } | 124 } |
| 122 | 125 |
| 123 if (!surface->OnMakeCurrent(this)) { | 126 if (!surface->OnMakeCurrent(this)) { |
| 124 LOG(ERROR) << "Could not make current."; | 127 LOG(ERROR) << "Could not make current."; |
| 125 return false; | 128 return false; |
| 126 } | 129 } |
| 127 | 130 |
| 131 is_surfaceless_context_ = surface->IsSurfaceless(); | |
| 128 release_current.Cancel(); | 132 release_current.Cancel(); |
| 129 return true; | 133 return true; |
| 130 } | 134 } |
| 131 | 135 |
| 132 void GLContextEGL::SetUnbindFboOnMakeCurrent() { | 136 void GLContextEGL::SetUnbindFboOnMakeCurrent() { |
| 133 unbind_fbo_on_makecurrent_ = true; | 137 unbind_fbo_on_makecurrent_ = true; |
| 134 } | 138 } |
| 135 | 139 |
| 136 void GLContextEGL::ReleaseCurrent(GLSurface* surface) { | 140 void GLContextEGL::ReleaseCurrent(GLSurface* surface) { |
| 137 if (!IsCurrent(surface)) | 141 if (!IsCurrent(surface)) |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 167 | 171 |
| 168 return true; | 172 return true; |
| 169 } | 173 } |
| 170 | 174 |
| 171 void* GLContextEGL::GetHandle() { | 175 void* GLContextEGL::GetHandle() { |
| 172 return context_; | 176 return context_; |
| 173 } | 177 } |
| 174 | 178 |
| 175 void GLContextEGL::SetSwapInterval(int interval) { | 179 void GLContextEGL::SetSwapInterval(int interval) { |
| 176 DCHECK(IsCurrent(NULL)); | 180 DCHECK(IsCurrent(NULL)); |
| 181 | |
| 182 // This is a surfaceless context. eglSwapInterval doesn't take any effect in | |
| 183 // this case and will just return EGL_BAD_SURFACE. | |
| 184 if (is_surfaceless_context_) | |
|
piman
2014/11/03 19:43:13
Rather than stashing a bool, you can simply use GL
kalyank
2014/11/03 20:04:53
Didn't realize that, thanks. Will do that.
kalyank
2014/11/03 20:46:11
Done.
| |
| 185 return; | |
| 186 | |
| 177 if (!eglSwapInterval(display_, interval)) { | 187 if (!eglSwapInterval(display_, interval)) { |
| 178 LOG(ERROR) << "eglSwapInterval failed with error " | 188 LOG(ERROR) << "eglSwapInterval failed with error " |
| 179 << GetLastEGLErrorString(); | 189 << GetLastEGLErrorString(); |
| 180 } | 190 } |
| 181 } | 191 } |
| 182 | 192 |
| 183 std::string GLContextEGL::GetExtensions() { | 193 std::string GLContextEGL::GetExtensions() { |
| 184 const char* extensions = eglQueryString(display_, | 194 const char* extensions = eglQueryString(display_, |
| 185 EGL_EXTENSIONS); | 195 EGL_EXTENSIONS); |
| 186 if (!extensions) | 196 if (!extensions) |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 199 | 209 |
| 200 #if !defined(OS_ANDROID) | 210 #if !defined(OS_ANDROID) |
| 201 bool GLContextEGL::GetTotalGpuMemory(size_t* bytes) { | 211 bool GLContextEGL::GetTotalGpuMemory(size_t* bytes) { |
| 202 DCHECK(bytes); | 212 DCHECK(bytes); |
| 203 *bytes = 0; | 213 *bytes = 0; |
| 204 return false; | 214 return false; |
| 205 } | 215 } |
| 206 #endif | 216 #endif |
| 207 | 217 |
| 208 } // namespace gfx | 218 } // namespace gfx |
| OLD | NEW |