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

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

Issue 1285183008: Ozone integration. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: add missing license header Created 5 years, 4 months 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
« no previous file with comments | « ui/gl/gl_surface_egl.h ('k') | ui/gl/gl_surface_glx.h » ('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) 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_surface_egl.h" 5 #include "ui/gl/gl_surface_egl.h"
6 6
7 #if defined(OS_ANDROID) 7 #if defined(OS_ANDROID)
8 #include <android/native_window_jni.h> 8 #include <android/native_window_jni.h>
9 #endif 9 #endif
10 10
(...skipping 12 matching lines...) Expand all
23 #include "ui/gl/scoped_make_current.h" 23 #include "ui/gl/scoped_make_current.h"
24 #include "ui/gl/sync_control_vsync_provider.h" 24 #include "ui/gl/sync_control_vsync_provider.h"
25 25
26 #if defined(USE_X11) 26 #if defined(USE_X11)
27 extern "C" { 27 extern "C" {
28 #include <X11/Xlib.h> 28 #include <X11/Xlib.h>
29 } 29 }
30 #endif 30 #endif
31 31
32 #if defined (USE_OZONE) 32 #if defined (USE_OZONE)
33 #include "ui/ozone/public/surface_factory_ozone.h" 33 #include "ui/ozone/public/ozone_platform.h" // nogncheck
34 #include "ui/ozone/public/surface_factory_ozone.h" // nogncheck
34 #endif 35 #endif
35 36
36 #if !defined(EGL_FIXED_SIZE_ANGLE) 37 #if !defined(EGL_FIXED_SIZE_ANGLE)
37 #define EGL_FIXED_SIZE_ANGLE 0x3201 38 #define EGL_FIXED_SIZE_ANGLE 0x3201
38 #endif 39 #endif
39 40
40 #if !defined(EGL_OPENGL_ES3_BIT) 41 #if !defined(EGL_OPENGL_ES3_BIT)
41 #define EGL_OPENGL_ES3_BIT 0x00000040 42 #define EGL_OPENGL_ES3_BIT 0x00000040
42 #endif 43 #endif
43 44
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 &win_attribs)) { 136 &win_attribs)) {
136 return nullptr; 137 return nullptr;
137 } 138 }
138 #endif 139 #endif
139 140
140 EGLint renderable_type = EGL_OPENGL_ES2_BIT; 141 EGLint renderable_type = EGL_OPENGL_ES2_BIT;
141 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 142 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
142 switches::kEnableUnsafeES3APIs)) { 143 switches::kEnableUnsafeES3APIs)) {
143 renderable_type = EGL_OPENGL_ES3_BIT; 144 renderable_type = EGL_OPENGL_ES3_BIT;
144 } 145 }
145 EGLint config_attribs[] = { 146 EGLint kConfigAttribs[] = {
146 EGL_BUFFER_SIZE, configuration.alpha_bits + 147 EGL_BUFFER_SIZE, configuration.alpha_bits +
147 configuration.red_bits + 148 configuration.red_bits +
148 configuration.green_bits + 149 configuration.green_bits +
149 configuration.blue_bits, 150 configuration.blue_bits,
150 EGL_ALPHA_SIZE, configuration.alpha_bits, 151 EGL_ALPHA_SIZE, configuration.alpha_bits,
151 EGL_BLUE_SIZE, configuration.blue_bits, 152 EGL_BLUE_SIZE, configuration.blue_bits,
152 EGL_GREEN_SIZE, configuration.green_bits, 153 EGL_GREEN_SIZE, configuration.green_bits,
153 EGL_RED_SIZE, configuration.red_bits, 154 EGL_RED_SIZE, configuration.red_bits,
154 EGL_DEPTH_SIZE, configuration.depth_bits, 155 EGL_DEPTH_SIZE, configuration.depth_bits,
155 EGL_STENCIL_SIZE, configuration.stencil_bits, 156 EGL_STENCIL_SIZE, configuration.stencil_bits,
156 EGL_RENDERABLE_TYPE, renderable_type, 157 EGL_RENDERABLE_TYPE, renderable_type,
157 EGL_SURFACE_TYPE, (allow_window_bit ? 158 EGL_SURFACE_TYPE, (allow_window_bit ?
158 (EGL_WINDOW_BIT | EGL_PBUFFER_BIT) : 159 (EGL_WINDOW_BIT | EGL_PBUFFER_BIT) :
159 EGL_PBUFFER_BIT), 160 EGL_PBUFFER_BIT),
160 EGL_NONE 161 EGL_NONE
161 }; 162 };
162 163
163 #if defined(USE_OZONE) 164 #if defined(USE_OZONE)
164 config_attribs = 165 const EGLint* config_attribs = ui::OzonePlatform::GetInstance()
165 ui::SurfaceFactoryOzone::GetInstance()->GetEGLSurfaceProperties( 166 ->GetSurfaceFactoryOzone()
166 config_attribs); 167 ->GetEGLSurfaceProperties(kConfigAttribs);
167 #elif defined(USE_X11) 168 #elif defined(USE_X11)
169 EGLint* config_attribs = kConfigAttribs;
168 // Try matching the window depth with an alpha channel, 170 // Try matching the window depth with an alpha channel,
169 // because we're worried the destination alpha width could 171 // because we're worried the destination alpha width could
170 // constrain blending precision. 172 // constrain blending precision.
171 const int kBufferSizeOffset = 1; 173 const int kBufferSizeOffset = 1;
172 const int kAlphaSizeOffset = 3; 174 const int kAlphaSizeOffset = 3;
173 config_attribs[kBufferSizeOffset] = win_attribs.depth; 175 config_attribs[kBufferSizeOffset] = win_attribs.depth;
176 #else
177 const EGLint* config_attribs = kConfigAttribs;
174 #endif 178 #endif
175 179
176 EGLint num_configs; 180 EGLint num_configs;
177 if (!eglChooseConfig(g_display, 181 if (!eglChooseConfig(g_display,
178 config_attribs, 182 config_attribs,
179 NULL, 183 NULL,
180 0, 184 0,
181 &num_configs)) { 185 &num_configs)) {
182 LOG(ERROR) << "eglChooseConfig failed with error " 186 LOG(ERROR) << "eglChooseConfig failed with error "
183 << GetLastEGLErrorString(); 187 << GetLastEGLErrorString();
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 DCHECK(window_); 443 DCHECK(window_);
440 config_ = GetEGLConfig(window_, this->get_surface_configuration(), true); 444 config_ = GetEGLConfig(window_, this->get_surface_configuration(), true);
441 } 445 }
442 return config_; 446 return config_;
443 } 447 }
444 448
445 bool NativeViewGLSurfaceEGL::IsOffscreen() { 449 bool NativeViewGLSurfaceEGL::IsOffscreen() {
446 return false; 450 return false;
447 } 451 }
448 452
449 bool NativeViewGLSurfaceEGL::SwapBuffers() { 453 gfx::SwapResult NativeViewGLSurfaceEGL::SwapBuffers() {
450 TRACE_EVENT2("gpu", "NativeViewGLSurfaceEGL:RealSwapBuffers", 454 TRACE_EVENT2("gpu", "NativeViewGLSurfaceEGL:RealSwapBuffers",
451 "width", GetSize().width(), 455 "width", GetSize().width(),
452 "height", GetSize().height()); 456 "height", GetSize().height());
453 457
454 if (!eglSwapBuffers(GetDisplay(), surface_)) { 458 if (!eglSwapBuffers(GetDisplay(), surface_)) {
455 DVLOG(1) << "eglSwapBuffers failed with error " 459 DVLOG(1) << "eglSwapBuffers failed with error "
456 << GetLastEGLErrorString(); 460 << GetLastEGLErrorString();
457 return false; 461 return gfx::SwapResult::SWAP_FAILED;
458 } 462 }
459 463
460 return true; 464 return gfx::SwapResult::SWAP_ACK;
461 } 465 }
462 466
463 gfx::Size NativeViewGLSurfaceEGL::GetSize() { 467 gfx::Size NativeViewGLSurfaceEGL::GetSize() {
464 EGLint width; 468 EGLint width;
465 EGLint height; 469 EGLint height;
466 if (!eglQuerySurface(GetDisplay(), surface_, EGL_WIDTH, &width) || 470 if (!eglQuerySurface(GetDisplay(), surface_, EGL_WIDTH, &width) ||
467 !eglQuerySurface(GetDisplay(), surface_, EGL_HEIGHT, &height)) { 471 !eglQuerySurface(GetDisplay(), surface_, EGL_HEIGHT, &height)) {
468 NOTREACHED() << "eglQuerySurface failed with error " 472 NOTREACHED() << "eglQuerySurface failed with error "
469 << GetLastEGLErrorString(); 473 << GetLastEGLErrorString();
470 return gfx::Size(); 474 return gfx::Size();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 } 513 }
510 514
511 EGLSurface NativeViewGLSurfaceEGL::GetHandle() { 515 EGLSurface NativeViewGLSurfaceEGL::GetHandle() {
512 return surface_; 516 return surface_;
513 } 517 }
514 518
515 bool NativeViewGLSurfaceEGL::SupportsPostSubBuffer() { 519 bool NativeViewGLSurfaceEGL::SupportsPostSubBuffer() {
516 return supports_post_sub_buffer_; 520 return supports_post_sub_buffer_;
517 } 521 }
518 522
519 bool NativeViewGLSurfaceEGL::PostSubBuffer( 523 gfx::SwapResult NativeViewGLSurfaceEGL::PostSubBuffer(
520 int x, int y, int width, int height) { 524 int x, int y, int width, int height) {
521 DCHECK(supports_post_sub_buffer_); 525 DCHECK(supports_post_sub_buffer_);
522 if (!eglPostSubBufferNV(GetDisplay(), surface_, x, y, width, height)) { 526 if (!eglPostSubBufferNV(GetDisplay(), surface_, x, y, width, height)) {
523 DVLOG(1) << "eglPostSubBufferNV failed with error " 527 DVLOG(1) << "eglPostSubBufferNV failed with error "
524 << GetLastEGLErrorString(); 528 << GetLastEGLErrorString();
525 return false; 529 return gfx::SwapResult::SWAP_FAILED;
526 } 530 }
527 return true; 531 return gfx::SwapResult::SWAP_ACK;
528 } 532 }
529 533
530 VSyncProvider* NativeViewGLSurfaceEGL::GetVSyncProvider() { 534 VSyncProvider* NativeViewGLSurfaceEGL::GetVSyncProvider() {
531 return vsync_provider_.get(); 535 return vsync_provider_.get();
532 } 536 }
533 537
534 void NativeViewGLSurfaceEGL::OnSetSwapInterval(int interval) { 538 void NativeViewGLSurfaceEGL::OnSetSwapInterval(int interval) {
535 swap_interval_ = interval; 539 swap_interval_ = interval;
536 } 540 }
537 541
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 this->get_surface_configuration(), 611 this->get_surface_configuration(),
608 false); 612 false);
609 } 613 }
610 return config_; 614 return config_;
611 } 615 }
612 616
613 bool PbufferGLSurfaceEGL::IsOffscreen() { 617 bool PbufferGLSurfaceEGL::IsOffscreen() {
614 return true; 618 return true;
615 } 619 }
616 620
617 bool PbufferGLSurfaceEGL::SwapBuffers() { 621 gfx::SwapResult PbufferGLSurfaceEGL::SwapBuffers() {
618 NOTREACHED() << "Attempted to call SwapBuffers on a PbufferGLSurfaceEGL."; 622 NOTREACHED() << "Attempted to call SwapBuffers on a PbufferGLSurfaceEGL.";
619 return false; 623 return gfx::SwapResult::SWAP_FAILED;
620 } 624 }
621 625
622 gfx::Size PbufferGLSurfaceEGL::GetSize() { 626 gfx::Size PbufferGLSurfaceEGL::GetSize() {
623 return size_; 627 return size_;
624 } 628 }
625 629
626 bool PbufferGLSurfaceEGL::Resize(const gfx::Size& size) { 630 bool PbufferGLSurfaceEGL::Resize(const gfx::Size& size) {
627 if (size == size_) 631 if (size == size_)
628 return true; 632 return true;
629 633
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 } 699 }
696 700
697 bool SurfacelessEGL::IsOffscreen() { 701 bool SurfacelessEGL::IsOffscreen() {
698 return true; 702 return true;
699 } 703 }
700 704
701 bool SurfacelessEGL::IsSurfaceless() const { 705 bool SurfacelessEGL::IsSurfaceless() const {
702 return true; 706 return true;
703 } 707 }
704 708
705 bool SurfacelessEGL::SwapBuffers() { 709 gfx::SwapResult SurfacelessEGL::SwapBuffers() {
706 LOG(ERROR) << "Attempted to call SwapBuffers with SurfacelessEGL."; 710 LOG(ERROR) << "Attempted to call SwapBuffers with SurfacelessEGL.";
707 return false; 711 return gfx::SwapResult::SWAP_FAILED;
708 } 712 }
709 713
710 gfx::Size SurfacelessEGL::GetSize() { 714 gfx::Size SurfacelessEGL::GetSize() {
711 return size_; 715 return size_;
712 } 716 }
713 717
714 bool SurfacelessEGL::Resize(const gfx::Size& size) { 718 bool SurfacelessEGL::Resize(const gfx::Size& size) {
715 size_ = size; 719 size_ = size;
716 return true; 720 return true;
717 } 721 }
718 722
719 EGLSurface SurfacelessEGL::GetHandle() { 723 EGLSurface SurfacelessEGL::GetHandle() {
720 return EGL_NO_SURFACE; 724 return EGL_NO_SURFACE;
721 } 725 }
722 726
723 void* SurfacelessEGL::GetShareHandle() { 727 void* SurfacelessEGL::GetShareHandle() {
724 return NULL; 728 return NULL;
725 } 729 }
726 730
727 SurfacelessEGL::~SurfacelessEGL() { 731 SurfacelessEGL::~SurfacelessEGL() {
728 } 732 }
729 733
730 } // namespace gfx 734 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gl/gl_surface_egl.h ('k') | ui/gl/gl_surface_glx.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698