| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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, ¤t_alignment); |
| 480 glGetIntegerv(GL_PACK_ROW_LENGTH, ¤t_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 Loading... |
| 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) |
| OLD | NEW |