Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(479)

Side by Side Diff: ui/gfx/gl/gl_surface_egl.cc

Issue 8869007: GLSurface::Resize implementations release the current context if they are current before resize. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | ui/gfx/gl/gl_surface_osmesa.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #if !defined(OS_ANDROID) 10 #if !defined(OS_ANDROID)
11 #include "third_party/angle/include/EGL/egl.h" 11 #include "third_party/angle/include/EGL/egl.h"
12 #include "third_party/angle/include/EGL/eglext.h" 12 #include "third_party/angle/include/EGL/eglext.h"
13 #endif 13 #endif
14 #include "ui/gfx/gl/egl_util.h" 14 #include "ui/gfx/gl/egl_util.h"
15 #include "ui/gfx/gl/gl_context.h"
15 16
16 #if defined(OS_ANDROID) 17 #if defined(OS_ANDROID)
17 #include <EGL/egl.h> 18 #include <EGL/egl.h>
18 #endif 19 #endif
19 20
20 // This header must come after the above third-party include, as 21 // This header must come after the above third-party include, as
21 // it brings in #defines that cause conflicts. 22 // it brings in #defines that cause conflicts.
22 #include "ui/gfx/gl/gl_bindings.h" 23 #include "ui/gfx/gl/gl_bindings.h"
23 24
24 #if defined(USE_X11) && !defined(USE_WAYLAND) 25 #if defined(USE_X11) && !defined(USE_WAYLAND)
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 } 351 }
351 352
352 gfx::Size PbufferGLSurfaceEGL::GetSize() { 353 gfx::Size PbufferGLSurfaceEGL::GetSize() {
353 return size_; 354 return size_;
354 } 355 }
355 356
356 bool PbufferGLSurfaceEGL::Resize(const gfx::Size& size) { 357 bool PbufferGLSurfaceEGL::Resize(const gfx::Size& size) {
357 if (size == size_) 358 if (size == size_)
358 return true; 359 return true;
359 360
361 GLContext* current_context = GLContext::GetCurrent();
362 bool was_current = current_context && current_context->IsCurrent(this);
363 if (was_current)
364 current_context->ReleaseCurrent(this);
365
360 Destroy(); 366 Destroy();
367
361 size_ = size; 368 size_ = size;
362 return Initialize(); 369
370 if (!Initialize())
371 return false;
372
373 if (was_current)
374 return current_context->MakeCurrent(this);
375
376 return true;
363 } 377 }
364 378
365 EGLSurface PbufferGLSurfaceEGL::GetHandle() { 379 EGLSurface PbufferGLSurfaceEGL::GetHandle() {
366 return surface_; 380 return surface_;
367 } 381 }
368 382
369 void* PbufferGLSurfaceEGL::GetShareHandle() { 383 void* PbufferGLSurfaceEGL::GetShareHandle() {
370 #if defined(OS_ANDROID) 384 #if defined(OS_ANDROID)
371 NOTREACHED(); 385 NOTREACHED();
372 return NULL; 386 return NULL;
373 #else 387 #else
374 const char* extensions = eglQueryString(g_display, EGL_EXTENSIONS); 388 const char* extensions = eglQueryString(g_display, EGL_EXTENSIONS);
375 if (!strstr(extensions, "EGL_ANGLE_query_surface_pointer")) 389 if (!strstr(extensions, "EGL_ANGLE_query_surface_pointer"))
376 return NULL; 390 return NULL;
377 391
378 void* handle; 392 void* handle;
379 if (!eglQuerySurfacePointerANGLE(g_display, 393 if (!eglQuerySurfacePointerANGLE(g_display,
380 GetHandle(), 394 GetHandle(),
381 EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE, 395 EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE,
382 &handle)) { 396 &handle)) {
383 return NULL; 397 return NULL;
384 } 398 }
385 399
386 return handle; 400 return handle;
387 #endif 401 #endif
388 } 402 }
389 403
390 } // namespace gfx 404 } // namespace gfx
OLDNEW
« no previous file with comments | « no previous file | ui/gfx/gl/gl_surface_osmesa.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698