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

Side by Side Diff: content/common/gpu/image_transport_surface_mac.cc

Issue 8726046: Partial swaps on OSX (Closed) Base URL: backer@fancypants:chromium/src@master
Patch Set: Address reviewer comments. 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
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.mm ('k') | no next file » | 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 #if defined(ENABLE_GPU) 5 #if defined(ENABLE_GPU)
6 6
7 #include "content/common/gpu/image_transport_surface.h" 7 #include "content/common/gpu/image_transport_surface.h"
8 8
9 #include "base/mac/scoped_cftyperef.h" 9 #include "base/mac/scoped_cftyperef.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 227 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
228 params.surface_id = io_surface_id_; 228 params.surface_id = io_surface_id_;
229 helper_->SendAcceleratedSurfaceBuffersSwapped(params); 229 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
230 230
231 helper_->SetScheduled(false); 231 helper_->SetScheduled(false);
232 return true; 232 return true;
233 } 233 }
234 234
235 bool IOSurfaceImageTransportSurface::PostSubBuffer( 235 bool IOSurfaceImageTransportSurface::PostSubBuffer(
236 int x, int y, int width, int height) { 236 int x, int y, int width, int height) {
237 NOTREACHED(); 237 glFlush();
238 return false; 238
239 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params;
240 params.surface_id = io_surface_id_;
241 params.x = x;
242 params.y = y;
243 params.width = width;
244 params.height = height;
245 helper_->SendAcceleratedSurfacePostSubBuffer(params);
246
247 helper_->SetScheduled(false);
248 return true;
239 } 249 }
240 250
241 std::string IOSurfaceImageTransportSurface::GetExtensions() { 251 std::string IOSurfaceImageTransportSurface::GetExtensions() {
242 std::string extensions = gfx::GLSurface::GetExtensions(); 252 std::string extensions = gfx::GLSurface::GetExtensions();
243 extensions += extensions.empty() ? "" : " "; 253 extensions += extensions.empty() ? "" : " ";
244 extensions += "GL_CHROMIUM_front_buffer_cached"; 254 extensions += "GL_CHROMIUM_front_buffer_cached ";
255 extensions += "GL_CHROMIUM_post_sub_buffer";
245 return extensions; 256 return extensions;
246 } 257 }
247 258
248 gfx::Size IOSurfaceImageTransportSurface::GetSize() { 259 gfx::Size IOSurfaceImageTransportSurface::GetSize() {
249 return size_; 260 return size_;
250 } 261 }
251 262
252 void IOSurfaceImageTransportSurface::OnBuffersSwappedACK() { 263 void IOSurfaceImageTransportSurface::OnBuffersSwappedACK() {
253 helper_->SetScheduled(true); 264 helper_->SetScheduled(true);
254 } 265 }
255 266
256 void IOSurfaceImageTransportSurface::OnPostSubBufferACK() { 267 void IOSurfaceImageTransportSurface::OnPostSubBufferACK() {
257 NOTREACHED(); 268 helper_->SetScheduled(true);
258 } 269 }
259 270
260 void IOSurfaceImageTransportSurface::OnNewSurfaceACK( 271 void IOSurfaceImageTransportSurface::OnNewSurfaceACK(
261 uint64 surface_id, 272 uint64 surface_id,
262 TransportDIB::Handle /* shm_handle */) { 273 TransportDIB::Handle /* shm_handle */) {
263 DCHECK_EQ(io_surface_id_, surface_id); 274 DCHECK_EQ(io_surface_id_, surface_id);
264 helper_->SetScheduled(true); 275 helper_->SetScheduled(true);
265 } 276 }
266 277
267 void IOSurfaceImageTransportSurface::OnResizeViewACK() { 278 void IOSurfaceImageTransportSurface::OnResizeViewACK() {
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 461 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
451 params.surface_id = next_id_; 462 params.surface_id = next_id_;
452 helper_->SendAcceleratedSurfaceBuffersSwapped(params); 463 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
453 464
454 helper_->SetScheduled(false); 465 helper_->SetScheduled(false);
455 return true; 466 return true;
456 } 467 }
457 468
458 bool TransportDIBImageTransportSurface::PostSubBuffer( 469 bool TransportDIBImageTransportSurface::PostSubBuffer(
459 int x, int y, int width, int height) { 470 int x, int y, int width, int height) {
460 NOTREACHED(); 471 DCHECK_NE(shared_mem_.get(), static_cast<void*>(NULL));
461 return false; 472
473 GLint previous_fbo_id = 0;
474 glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &previous_fbo_id);
475
476 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo_id_);
477
478 GLint current_alignment = 0, current_pack_row_length = 0;
479 glGetIntegerv(GL_PACK_ALIGNMENT, &current_alignment);
480 glGetIntegerv(GL_PACK_ROW_LENGTH, &current_pack_row_length);
481
482 glPixelStorei(GL_PACK_ALIGNMENT, 4);
483 glPixelStorei(GL_PACK_ROW_LENGTH, size_.width());
484
485 unsigned char* buffer =
486 static_cast<unsigned char*>(shared_mem_->memory());
487 glReadPixels(x, y,
488 width, height,
489 GL_BGRA, // This pixel format should have no conversion.
490 GL_UNSIGNED_INT_8_8_8_8_REV,
491 &buffer[(x + y * size_.width()) * 4]);
492
493 glPixelStorei(GL_PACK_ALIGNMENT, current_alignment);
494 glPixelStorei(GL_PACK_ROW_LENGTH, current_pack_row_length);
495
496 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id);
497
498 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params;
499 params.surface_id = next_id_;
500 params.x = x;
501 params.y = y;
502 params.width = width;
503 params.height = height;
504 helper_->SendAcceleratedSurfacePostSubBuffer(params);
505
506 helper_->SetScheduled(false);
507 return true;
462 } 508 }
463 509
464 std::string TransportDIBImageTransportSurface::GetExtensions() { 510 std::string TransportDIBImageTransportSurface::GetExtensions() {
465 std::string extensions = gfx::GLSurface::GetExtensions(); 511 std::string extensions = gfx::GLSurface::GetExtensions();
466 extensions += extensions.empty() ? "" : " "; 512 extensions += extensions.empty() ? "" : " ";
467 extensions += "GL_CHROMIUM_front_buffer_cached"; 513 extensions += "GL_CHROMIUM_front_buffer_cached ";
514 extensions += "GL_CHROMIUM_post_sub_buffer";
468 return extensions; 515 return extensions;
469 } 516 }
470 517
471 gfx::Size TransportDIBImageTransportSurface::GetSize() { 518 gfx::Size TransportDIBImageTransportSurface::GetSize() {
472 return size_; 519 return size_;
473 } 520 }
474 521
475 void TransportDIBImageTransportSurface::OnBuffersSwappedACK() { 522 void TransportDIBImageTransportSurface::OnBuffersSwappedACK() {
476 helper_->SetScheduled(true); 523 helper_->SetScheduled(true);
477 } 524 }
478 525
479 void TransportDIBImageTransportSurface::OnPostSubBufferACK() { 526 void TransportDIBImageTransportSurface::OnPostSubBufferACK() {
480 NOTREACHED(); 527 helper_->SetScheduled(true);
481 } 528 }
482 529
483 void TransportDIBImageTransportSurface::OnNewSurfaceACK( 530 void TransportDIBImageTransportSurface::OnNewSurfaceACK(
484 uint64 surface_id, 531 uint64 surface_id,
485 TransportDIB::Handle shm_handle) { 532 TransportDIB::Handle shm_handle) {
486 helper_->SetScheduled(true); 533 helper_->SetScheduled(true);
487 534
488 shared_mem_.reset(TransportDIB::Map(shm_handle)); 535 shared_mem_.reset(TransportDIB::Map(shm_handle));
489 DCHECK_NE(shared_mem_.get(), static_cast<void*>(NULL)); 536 DCHECK_NE(shared_mem_.get(), static_cast<void*>(NULL));
490 } 537 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 NOTREACHED(); 608 NOTREACHED();
562 return NULL; 609 return NULL;
563 } 610 }
564 if (surface->Initialize()) 611 if (surface->Initialize())
565 return surface; 612 return surface;
566 else 613 else
567 return NULL; 614 return NULL;
568 } 615 }
569 616
570 #endif // defined(USE_GPU) 617 #endif // defined(USE_GPU)
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698