Index: ui/gl/gl_surface_win.cc |
diff --git a/ui/gl/gl_surface_win.cc b/ui/gl/gl_surface_win.cc |
index c5d986d4721e4e35be9208a110442df3e8d1a0bb..0b66b88146772e568b2871c7e7c03639d259a566 100644 |
--- a/ui/gl/gl_surface_win.cc |
+++ b/ui/gl/gl_surface_win.cc |
@@ -6,238 +6,10 @@ |
#include <dwmapi.h> |
-#include <memory> |
- |
-#include "base/command_line.h" |
-#include "base/logging.h" |
-#include "base/macros.h" |
-#include "base/trace_event/trace_event.h" |
-#include "base/win/windows_version.h" |
-#include "ui/gfx/native_widget_types.h" |
-#include "ui/gl/gl_bindings.h" |
-#include "ui/gl/gl_implementation.h" |
#include "ui/gl/gl_surface_egl.h" |
-#include "ui/gl/gl_surface_osmesa.h" |
-#include "ui/gl/gl_surface_stub.h" |
-#include "ui/gl/gl_surface_wgl.h" |
-#include "ui/gl/vsync_provider_win.h" |
- |
-// From ANGLE's egl/eglext.h. |
-#if !defined(EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE) |
-#define EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE \ |
- reinterpret_cast<EGLNativeDisplayType>(-2) |
-#endif |
namespace gl { |
-// This OSMesa GL surface can use GDI to swap the contents of the buffer to a |
-// view. |
-class NativeViewGLSurfaceOSMesa : public GLSurfaceOSMesa { |
- public: |
- explicit NativeViewGLSurfaceOSMesa(gfx::AcceleratedWidget window); |
- |
- // Implement subset of GLSurface. |
- bool Initialize(GLSurface::Format format) override; |
- void Destroy() override; |
- bool IsOffscreen() override; |
- gfx::SwapResult SwapBuffers() override; |
- bool SupportsPostSubBuffer() override; |
- gfx::SwapResult PostSubBuffer(int x, int y, int width, int height) override; |
- |
- private: |
- ~NativeViewGLSurfaceOSMesa() override; |
- |
- gfx::AcceleratedWidget window_; |
- HDC device_context_; |
- |
- DISALLOW_COPY_AND_ASSIGN(NativeViewGLSurfaceOSMesa); |
-}; |
- |
-NativeViewGLSurfaceOSMesa::NativeViewGLSurfaceOSMesa( |
- gfx::AcceleratedWidget window) |
- : GLSurfaceOSMesa(SURFACE_OSMESA_RGBA, gfx::Size(1, 1)), |
- window_(window), |
- device_context_(NULL) { |
- DCHECK(window); |
-} |
- |
-NativeViewGLSurfaceOSMesa::~NativeViewGLSurfaceOSMesa() { |
- Destroy(); |
-} |
- |
-bool NativeViewGLSurfaceOSMesa::Initialize(GLSurface::Format format) { |
- if (!GLSurfaceOSMesa::Initialize(format)) |
- return false; |
- |
- device_context_ = GetDC(window_); |
- return true; |
-} |
- |
-void NativeViewGLSurfaceOSMesa::Destroy() { |
- if (window_ && device_context_) |
- ReleaseDC(window_, device_context_); |
- |
- device_context_ = NULL; |
- |
- GLSurfaceOSMesa::Destroy(); |
-} |
- |
-bool NativeViewGLSurfaceOSMesa::IsOffscreen() { |
- return false; |
-} |
- |
-gfx::SwapResult NativeViewGLSurfaceOSMesa::SwapBuffers() { |
- DCHECK(device_context_); |
- |
- gfx::Size size = GetSize(); |
- |
- // Note: negating the height below causes GDI to treat the bitmap data as row |
- // 0 being at the top. |
- BITMAPV4HEADER info = { sizeof(BITMAPV4HEADER) }; |
- info.bV4Width = size.width(); |
- info.bV4Height = -size.height(); |
- info.bV4Planes = 1; |
- info.bV4BitCount = 32; |
- info.bV4V4Compression = BI_BITFIELDS; |
- info.bV4RedMask = 0x000000FF; |
- info.bV4GreenMask = 0x0000FF00; |
- info.bV4BlueMask = 0x00FF0000; |
- info.bV4AlphaMask = 0xFF000000; |
- |
- // Copy the back buffer to the window's device context. Do not check whether |
- // StretchDIBits succeeds or not. It will fail if the window has been |
- // destroyed but it is preferable to allow rendering to silently fail if the |
- // window is destroyed. This is because the primary application of this |
- // class of GLContext is for testing and we do not want every GL related ui / |
- // browser test to become flaky if there is a race condition between GL |
- // context destruction and window destruction. |
- StretchDIBits(device_context_, |
- 0, 0, size.width(), size.height(), |
- 0, 0, size.width(), size.height(), |
- GetHandle(), |
- reinterpret_cast<BITMAPINFO*>(&info), |
- DIB_RGB_COLORS, |
- SRCCOPY); |
- |
- return gfx::SwapResult::SWAP_ACK; |
-} |
- |
-bool NativeViewGLSurfaceOSMesa::SupportsPostSubBuffer() { |
- return true; |
-} |
- |
-gfx::SwapResult NativeViewGLSurfaceOSMesa::PostSubBuffer(int x, |
- int y, |
- int width, |
- int height) { |
- DCHECK(device_context_); |
- |
- gfx::Size size = GetSize(); |
- |
- // Note: negating the height below causes GDI to treat the bitmap data as row |
- // 0 being at the top. |
- BITMAPV4HEADER info = { sizeof(BITMAPV4HEADER) }; |
- info.bV4Width = size.width(); |
- info.bV4Height = -size.height(); |
- info.bV4Planes = 1; |
- info.bV4BitCount = 32; |
- info.bV4V4Compression = BI_BITFIELDS; |
- info.bV4RedMask = 0x000000FF; |
- info.bV4GreenMask = 0x0000FF00; |
- info.bV4BlueMask = 0x00FF0000; |
- info.bV4AlphaMask = 0xFF000000; |
- |
- // Copy the back buffer to the window's device context. Do not check whether |
- // StretchDIBits succeeds or not. It will fail if the window has been |
- // destroyed but it is preferable to allow rendering to silently fail if the |
- // window is destroyed. This is because the primary application of this |
- // class of GLContext is for testing and we do not want every GL related ui / |
- // browser test to become flaky if there is a race condition between GL |
- // context destruction and window destruction. |
- StretchDIBits(device_context_, |
- x, size.height() - y - height, width, height, |
- x, y, width, height, |
- GetHandle(), |
- reinterpret_cast<BITMAPINFO*>(&info), |
- DIB_RGB_COLORS, |
- SRCCOPY); |
- |
- return gfx::SwapResult::SWAP_ACK; |
-} |
- |
-scoped_refptr<GLSurface> GLSurface::CreateViewGLSurface( |
- gfx::AcceleratedWidget window) { |
- TRACE_EVENT0("gpu", "GLSurface::CreateViewGLSurface"); |
- switch (GetGLImplementation()) { |
- case kGLImplementationOSMesaGL: { |
- scoped_refptr<GLSurface> surface( |
- new NativeViewGLSurfaceOSMesa(window)); |
- if (!surface->Initialize()) |
- return NULL; |
- |
- return surface; |
- } |
- case kGLImplementationEGLGLES2: { |
- DCHECK(window != gfx::kNullAcceleratedWidget); |
- scoped_refptr<NativeViewGLSurfaceEGL> surface( |
- new NativeViewGLSurfaceEGL(window)); |
- std::unique_ptr<gfx::VSyncProvider> sync_provider; |
- sync_provider.reset(new VSyncProviderWin(window)); |
- if (!surface->Initialize(std::move(sync_provider))) |
- return NULL; |
- |
- return surface; |
- } |
- case kGLImplementationDesktopGL: { |
- scoped_refptr<GLSurface> surface(new NativeViewGLSurfaceWGL( |
- window)); |
- if (!surface->Initialize()) |
- return NULL; |
- |
- return surface; |
- } |
- case kGLImplementationMockGL: |
- return new GLSurfaceStub; |
- default: |
- NOTREACHED(); |
- return NULL; |
- } |
-} |
- |
-scoped_refptr<GLSurface> GLSurface::CreateOffscreenGLSurface( |
- const gfx::Size& size) { |
- TRACE_EVENT0("gpu", "GLSurface::CreateOffscreenGLSurface"); |
- switch (GetGLImplementation()) { |
- case kGLImplementationOSMesaGL: { |
- scoped_refptr<GLSurface> surface( |
- new GLSurfaceOSMesa(SURFACE_OSMESA_RGBA, size)); |
- if (!surface->Initialize()) |
- return NULL; |
- |
- return surface; |
- } |
- case kGLImplementationEGLGLES2: { |
- scoped_refptr<GLSurface> surface(new PbufferGLSurfaceEGL(size)); |
- if (!surface->Initialize()) |
- return NULL; |
- |
- return surface; |
- } |
- case kGLImplementationDesktopGL: { |
- scoped_refptr<GLSurface> surface(new PbufferGLSurfaceWGL(size)); |
- if (!surface->Initialize()) |
- return NULL; |
- |
- return surface; |
- } |
- case kGLImplementationMockGL: |
- return new GLSurfaceStub; |
- default: |
- NOTREACHED(); |
- return NULL; |
- } |
-} |
- |
EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() { |
return GetDC(NULL); |
} |