| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "gpu/ipc/service/child_window_surface_win.h" | 5 #include "gpu/ipc/service/child_window_surface_win.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/win/scoped_hdc.h" | 10 #include "base/win/scoped_hdc.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 g_window_class = RegisterClassEx(&intermediate_class); | 67 g_window_class = RegisterClassEx(&intermediate_class); |
| 68 if (!g_window_class) { | 68 if (!g_window_class) { |
| 69 LOG(ERROR) << "RegisterClass failed."; | 69 LOG(ERROR) << "RegisterClass failed."; |
| 70 return; | 70 return; |
| 71 } | 71 } |
| 72 } | 72 } |
| 73 } | 73 } |
| 74 | 74 |
| 75 ChildWindowSurfaceWin::ChildWindowSurfaceWin(GpuChannelManager* manager, | 75 ChildWindowSurfaceWin::ChildWindowSurfaceWin(GpuChannelManager* manager, |
| 76 HWND parent_window) | 76 HWND parent_window) |
| 77 : gfx::NativeViewGLSurfaceEGL(0), | 77 : gl::NativeViewGLSurfaceEGL(0), |
| 78 parent_window_(parent_window), | 78 parent_window_(parent_window), |
| 79 manager_(manager), | 79 manager_(manager), |
| 80 alpha_(true), | 80 alpha_(true), |
| 81 first_swap_(true) { | 81 first_swap_(true) { |
| 82 // Don't use EGL_ANGLE_window_fixed_size so that we can avoid recreating the | 82 // Don't use EGL_ANGLE_window_fixed_size so that we can avoid recreating the |
| 83 // window surface, which can cause flicker on DirectComposition. | 83 // window surface, which can cause flicker on DirectComposition. |
| 84 enable_fixed_size_angle_ = false; | 84 enable_fixed_size_angle_ = false; |
| 85 } | 85 } |
| 86 | 86 |
| 87 EGLConfig ChildWindowSurfaceWin::GetConfig() { | 87 EGLConfig ChildWindowSurfaceWin::GetConfig() { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 } | 135 } |
| 136 | 136 |
| 137 bool ChildWindowSurfaceWin::Resize(const gfx::Size& size, | 137 bool ChildWindowSurfaceWin::Resize(const gfx::Size& size, |
| 138 float scale_factor, | 138 float scale_factor, |
| 139 bool has_alpha) { | 139 bool has_alpha) { |
| 140 if (!SupportsPostSubBuffer()) { | 140 if (!SupportsPostSubBuffer()) { |
| 141 if (!MoveWindow(window_, 0, 0, size.width(), size.height(), FALSE)) { | 141 if (!MoveWindow(window_, 0, 0, size.width(), size.height(), FALSE)) { |
| 142 return false; | 142 return false; |
| 143 } | 143 } |
| 144 alpha_ = has_alpha; | 144 alpha_ = has_alpha; |
| 145 return gfx::NativeViewGLSurfaceEGL::Resize(size, scale_factor, has_alpha); | 145 return gl::NativeViewGLSurfaceEGL::Resize(size, scale_factor, has_alpha); |
| 146 } else { | 146 } else { |
| 147 if (size == GetSize() && has_alpha == alpha_) | 147 if (size == GetSize() && has_alpha == alpha_) |
| 148 return true; | 148 return true; |
| 149 | 149 |
| 150 // Force a resize and redraw (but not a move, activate, etc.). | 150 // Force a resize and redraw (but not a move, activate, etc.). |
| 151 if (!SetWindowPos(window_, nullptr, 0, 0, size.width(), size.height(), | 151 if (!SetWindowPos(window_, nullptr, 0, 0, size.width(), size.height(), |
| 152 SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOCOPYBITS | | 152 SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOCOPYBITS | |
| 153 SWP_NOOWNERZORDER | SWP_NOZORDER)) { | 153 SWP_NOOWNERZORDER | SWP_NOZORDER)) { |
| 154 return false; | 154 return false; |
| 155 } | 155 } |
| 156 size_ = size; | 156 size_ = size; |
| 157 if (has_alpha == alpha_) { | 157 if (has_alpha == alpha_) { |
| 158 // A 0-size PostSubBuffer doesn't swap but forces the swap chain to resize | 158 // A 0-size PostSubBuffer doesn't swap but forces the swap chain to resize |
| 159 // to match the window. | 159 // to match the window. |
| 160 PostSubBuffer(0, 0, 0, 0); | 160 PostSubBuffer(0, 0, 0, 0); |
| 161 } else { | 161 } else { |
| 162 alpha_ = has_alpha; | 162 alpha_ = has_alpha; |
| 163 config_ = nullptr; | 163 config_ = nullptr; |
| 164 | 164 |
| 165 std::unique_ptr<ui::ScopedMakeCurrent> scoped_make_current; | 165 std::unique_ptr<ui::ScopedMakeCurrent> scoped_make_current; |
| 166 gfx::GLContext* current_context = gfx::GLContext::GetCurrent(); | 166 gl::GLContext* current_context = gl::GLContext::GetCurrent(); |
| 167 bool was_current = current_context && current_context->IsCurrent(this); | 167 bool was_current = current_context && current_context->IsCurrent(this); |
| 168 if (was_current) { | 168 if (was_current) { |
| 169 scoped_make_current.reset( | 169 scoped_make_current.reset( |
| 170 new ui::ScopedMakeCurrent(current_context, this)); | 170 new ui::ScopedMakeCurrent(current_context, this)); |
| 171 current_context->ReleaseCurrent(this); | 171 current_context->ReleaseCurrent(this); |
| 172 } | 172 } |
| 173 | 173 |
| 174 Destroy(); | 174 Destroy(); |
| 175 | 175 |
| 176 if (!Initialize()) { | 176 if (!Initialize()) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 rect_to_clear_ = gfx::Rect(); | 221 rect_to_clear_ = gfx::Rect(); |
| 222 } | 222 } |
| 223 } | 223 } |
| 224 | 224 |
| 225 ChildWindowSurfaceWin::~ChildWindowSurfaceWin() { | 225 ChildWindowSurfaceWin::~ChildWindowSurfaceWin() { |
| 226 gfx::SetWindowUserData(window_, nullptr); | 226 gfx::SetWindowUserData(window_, nullptr); |
| 227 DestroyWindow(window_); | 227 DestroyWindow(window_); |
| 228 } | 228 } |
| 229 | 229 |
| 230 } // namespace gpu | 230 } // namespace gpu |
| OLD | NEW |