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

Side by Side Diff: gpu/ipc/service/direct_composition_surface_win.cc

Issue 2735853002: Offset scissor and viewport when using SetDrawRectangle on surface. (Closed)
Patch Set: remove flag Created 3 years, 9 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 | « gpu/ipc/service/direct_composition_surface_win.h ('k') | ui/gl/gl_surface.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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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/direct_composition_surface_win.h" 5 #include "gpu/ipc/service/direct_composition_surface_win.h"
6 6
7 #include "base/optional.h" 7 #include "base/optional.h"
8 #include "gpu/ipc/service/gpu_channel_manager.h" 8 #include "gpu/ipc/service/gpu_channel_manager.h"
9 #include "gpu/ipc/service/gpu_channel_manager_delegate.h" 9 #include "gpu/ipc/service/gpu_channel_manager_delegate.h"
10 #include "ui/gfx/native_widget_types.h" 10 #include "ui/gfx/native_widget_types.h"
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 if (gfx::Rect(size_) != rectangle && !has_been_rendered_to_) { 288 if (gfx::Rect(size_) != rectangle && !has_been_rendered_to_) {
289 DLOG(ERROR) << "First draw to surface must draw to everything"; 289 DLOG(ERROR) << "First draw to surface must draw to everything";
290 return false; 290 return false;
291 } 291 }
292 292
293 DCHECK(!real_surface_); 293 DCHECK(!real_surface_);
294 CHECK(!g_current_surface); 294 CHECK(!g_current_surface);
295 ScopedReleaseCurrent release_current(this); 295 ScopedReleaseCurrent release_current(this);
296 296
297 RECT rect = rectangle.ToRECT(); 297 RECT rect = rectangle.ToRECT();
298 // TODO(jbauman): Use update_offset
299 POINT update_offset; 298 POINT update_offset;
300 299
301 HRESULT hr = dcomp_surface_->BeginDraw( 300 HRESULT hr = dcomp_surface_->BeginDraw(
302 &rect, IID_PPV_ARGS(draw_texture_.Receive()), &update_offset); 301 &rect, IID_PPV_ARGS(draw_texture_.Receive()), &update_offset);
303 CHECK(SUCCEEDED(hr)); 302 CHECK(SUCCEEDED(hr));
304 has_been_rendered_to_ = true; 303 has_been_rendered_to_ = true;
305 304
305 draw_offset_ = gfx::Point(update_offset) - gfx::Rect(rect).origin();
306
306 g_current_surface = dcomp_surface_.get(); 307 g_current_surface = dcomp_surface_.get();
307 308
308 std::vector<EGLint> pbuffer_attribs{ 309 std::vector<EGLint> pbuffer_attribs{
309 EGL_WIDTH, 310 EGL_WIDTH,
310 size_.width(), 311 size_.width(),
311 EGL_HEIGHT, 312 EGL_HEIGHT,
312 size_.height(), 313 size_.height(),
313 EGL_FLEXIBLE_SURFACE_COMPATIBILITY_SUPPORTED_ANGLE, 314 EGL_FLEXIBLE_SURFACE_COMPATIBILITY_SUPPORTED_ANGLE,
314 EGL_TRUE, 315 EGL_TRUE,
315 EGL_NONE}; 316 EGL_NONE};
316 317
317 EGLClientBuffer buffer = 318 EGLClientBuffer buffer =
318 reinterpret_cast<EGLClientBuffer>(draw_texture_.get()); 319 reinterpret_cast<EGLClientBuffer>(draw_texture_.get());
319 real_surface_ = eglCreatePbufferFromClientBuffer( 320 real_surface_ = eglCreatePbufferFromClientBuffer(
320 GetDisplay(), EGL_D3D_TEXTURE_ANGLE, buffer, GetConfig(), 321 GetDisplay(), EGL_D3D_TEXTURE_ANGLE, buffer, GetConfig(),
321 &pbuffer_attribs[0]); 322 &pbuffer_attribs[0]);
322 323
323 return true; 324 return true;
324 } 325 }
325 326
327 gfx::Vector2d DirectCompositionSurfaceWin::GetDrawOffset() const {
328 return draw_offset_;
329 }
330
326 scoped_refptr<base::TaskRunner> 331 scoped_refptr<base::TaskRunner>
327 DirectCompositionSurfaceWin::GetWindowTaskRunnerForTesting() { 332 DirectCompositionSurfaceWin::GetWindowTaskRunnerForTesting() {
328 return child_window_.GetTaskRunnerForTesting(); 333 return child_window_.GetTaskRunnerForTesting();
329 } 334 }
330 335
331 DirectCompositionSurfaceWin::Overlay::Overlay(int z_order, 336 DirectCompositionSurfaceWin::Overlay::Overlay(int z_order,
332 gfx::OverlayTransform transform, 337 gfx::OverlayTransform transform,
333 scoped_refptr<gl::GLImage> image, 338 scoped_refptr<gl::GLImage> image,
334 gfx::Rect bounds_rect, 339 gfx::Rect bounds_rect,
335 gfx::RectF crop_rect) 340 gfx::RectF crop_rect)
336 : z_order(z_order), 341 : z_order(z_order),
337 transform(transform), 342 transform(transform),
338 image(image), 343 image(image),
339 bounds_rect(bounds_rect), 344 bounds_rect(bounds_rect),
340 crop_rect(crop_rect) {} 345 crop_rect(crop_rect) {}
341 346
342 DirectCompositionSurfaceWin::Overlay::Overlay(const Overlay& overlay) = default; 347 DirectCompositionSurfaceWin::Overlay::Overlay(const Overlay& overlay) = default;
343 348
344 DirectCompositionSurfaceWin::Overlay::~Overlay() {} 349 DirectCompositionSurfaceWin::Overlay::~Overlay() {}
345 350
346 } // namespace gpu 351 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/ipc/service/direct_composition_surface_win.h ('k') | ui/gl/gl_surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698