Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/gfx/gl/gl_surface_egl.h" | 5 #include "ui/gfx/gl/gl_surface_egl.h" |
| 6 | 6 |
| 7 #include "build/build_config.h" | 7 #include "build/build_config.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 "third_party/angle/include/EGL/egl.h" | 10 #include "third_party/angle/include/EGL/egl.h" |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 166 return g_software_display; | 166 return g_software_display; |
| 167 } | 167 } |
| 168 | 168 |
| 169 EGLNativeDisplayType GLSurfaceEGL::GetNativeDisplay() { | 169 EGLNativeDisplayType GLSurfaceEGL::GetNativeDisplay() { |
| 170 return g_native_display; | 170 return g_native_display; |
| 171 } | 171 } |
| 172 | 172 |
| 173 NativeViewGLSurfaceEGL::NativeViewGLSurfaceEGL(bool software, | 173 NativeViewGLSurfaceEGL::NativeViewGLSurfaceEGL(bool software, |
| 174 gfx::PluginWindowHandle window) | 174 gfx::PluginWindowHandle window) |
| 175 : window_(window), | 175 : window_(window), |
| 176 surface_(NULL) | 176 surface_(NULL), |
| 177 supports_post_sub_buffer_(false) | |
| 177 { | 178 { |
| 178 software_ = software; | 179 software_ = software; |
| 179 } | 180 } |
| 180 | 181 |
| 181 NativeViewGLSurfaceEGL::~NativeViewGLSurfaceEGL() { | 182 NativeViewGLSurfaceEGL::~NativeViewGLSurfaceEGL() { |
| 182 Destroy(); | 183 Destroy(); |
| 183 } | 184 } |
| 184 | 185 |
| 185 bool NativeViewGLSurfaceEGL::Initialize() { | 186 bool NativeViewGLSurfaceEGL::Initialize() { |
| 186 DCHECK(!surface_); | 187 DCHECK(!surface_); |
| 187 | 188 |
| 188 if (!GetDisplay()) { | 189 if (!GetDisplay()) { |
| 189 LOG(ERROR) << "Trying to create surface with invalid display."; | 190 LOG(ERROR) << "Trying to create surface with invalid display."; |
| 190 return false; | 191 return false; |
| 191 } | 192 } |
| 192 | 193 |
| 194 static const EGLint egl_window_attributes_sub_buffer[] = { | |
| 195 EGL_POST_SUB_BUFFER_SUPPORTED_NV, EGL_TRUE, | |
| 196 EGL_NONE | |
| 197 }; | |
| 198 | |
| 193 // Create a surface for the native window. | 199 // Create a surface for the native window. |
| 194 surface_ = eglCreateWindowSurface(GetDisplay(), | 200 surface_ = eglCreateWindowSurface(GetDisplay(), |
| 195 GetConfig(), | 201 GetConfig(), |
| 196 window_, | 202 window_, |
| 197 NULL); | 203 gfx::g_EGL_NV_post_sub_buffer ? |
| 204 egl_window_attributes_sub_buffer : | |
| 205 NULL); | |
| 198 | 206 |
| 199 if (!surface_) { | 207 if (!surface_) { |
| 200 LOG(ERROR) << "eglCreateWindowSurface failed with error " | 208 LOG(ERROR) << "eglCreateWindowSurface failed with error " |
| 201 << GetLastEGLErrorString(); | 209 << GetLastEGLErrorString(); |
| 202 Destroy(); | 210 Destroy(); |
| 203 return false; | 211 return false; |
| 204 } | 212 } |
| 205 | 213 |
| 214 EGLint surfaceVal; | |
| 215 EGLBoolean retVal = eglQuerySurface(GetDisplay(), | |
|
apatrick_chromium
2011/11/10 19:33:16
Is it really the case that if you ask for a surfac
jonathan.backer
2011/11/10 21:00:25
I think so. I was inspired by some ChromeOS WM cod
| |
| 216 surface_, | |
| 217 EGL_POST_SUB_BUFFER_SUPPORTED_NV, | |
| 218 &surfaceVal); | |
| 219 supports_post_sub_buffer_ = (surfaceVal && retVal) == EGL_TRUE; | |
| 220 | |
| 206 return true; | 221 return true; |
| 207 } | 222 } |
| 208 | 223 |
| 209 void NativeViewGLSurfaceEGL::Destroy() { | 224 void NativeViewGLSurfaceEGL::Destroy() { |
| 210 if (surface_) { | 225 if (surface_) { |
| 211 if (!eglDestroySurface(GetDisplay(), surface_)) { | 226 if (!eglDestroySurface(GetDisplay(), surface_)) { |
| 212 LOG(ERROR) << "eglDestroySurface failed with error " | 227 LOG(ERROR) << "eglDestroySurface failed with error " |
| 213 << GetLastEGLErrorString(); | 228 << GetLastEGLErrorString(); |
| 214 } | 229 } |
| 215 surface_ = NULL; | 230 surface_ = NULL; |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 240 return gfx::Size(); | 255 return gfx::Size(); |
| 241 } | 256 } |
| 242 | 257 |
| 243 return gfx::Size(width, height); | 258 return gfx::Size(width, height); |
| 244 } | 259 } |
| 245 | 260 |
| 246 EGLSurface NativeViewGLSurfaceEGL::GetHandle() { | 261 EGLSurface NativeViewGLSurfaceEGL::GetHandle() { |
| 247 return surface_; | 262 return surface_; |
| 248 } | 263 } |
| 249 | 264 |
| 265 bool NativeViewGLSurfaceEGL::SupportsPostSubBuffer() { | |
| 266 return supports_post_sub_buffer_; | |
| 267 } | |
| 268 | |
| 269 bool NativeViewGLSurfaceEGL::PostSubBuffer( | |
| 270 int x, int y, int width, int height) { | |
| 271 DCHECK(supports_post_sub_buffer_); | |
| 272 return eglPostSubBufferNV(GetDisplay(), surface_, x, y, width, height); | |
| 273 } | |
| 274 | |
| 250 PbufferGLSurfaceEGL::PbufferGLSurfaceEGL(bool software, const gfx::Size& size) | 275 PbufferGLSurfaceEGL::PbufferGLSurfaceEGL(bool software, const gfx::Size& size) |
| 251 : size_(size), | 276 : size_(size), |
| 252 surface_(NULL) { | 277 surface_(NULL) { |
| 253 software_ = software; | 278 software_ = software; |
| 254 } | 279 } |
| 255 | 280 |
| 256 PbufferGLSurfaceEGL::~PbufferGLSurfaceEGL() { | 281 PbufferGLSurfaceEGL::~PbufferGLSurfaceEGL() { |
| 257 Destroy(); | 282 Destroy(); |
| 258 } | 283 } |
| 259 | 284 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 330 GetHandle(), | 355 GetHandle(), |
| 331 EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE, | 356 EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE, |
| 332 &handle)) { | 357 &handle)) { |
| 333 return NULL; | 358 return NULL; |
| 334 } | 359 } |
| 335 | 360 |
| 336 return handle; | 361 return handle; |
| 337 } | 362 } |
| 338 | 363 |
| 339 } // namespace gfx | 364 } // namespace gfx |
| OLD | NEW |