| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.
h" | 5 #include "webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.
h" |
| 6 | 6 |
| 7 #include <GLES2/gl2.h> | 7 #include <GLES2/gl2.h> |
| 8 #ifndef GL_GLEXT_PROTOTYPES | 8 #ifndef GL_GLEXT_PROTOTYPES |
| 9 #define GL_GLEXT_PROTOTYPES 1 | 9 #define GL_GLEXT_PROTOTYPES 1 |
| 10 #endif | 10 #endif |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 scoped_ptr<GpuMemoryBuffer> buffer = | 350 scoped_ptr<GpuMemoryBuffer> buffer = |
| 351 g_gpu_memory_buffer_creator(width, height); | 351 g_gpu_memory_buffer_creator(width, height); |
| 352 | 352 |
| 353 if (buffer.get() == NULL) | 353 if (buffer.get() == NULL) |
| 354 return buffer.Pass(); | 354 return buffer.Pass(); |
| 355 | 355 |
| 356 scoped_refptr<gfx::GLImage> gl_image = | 356 scoped_refptr<gfx::GLImage> gl_image = |
| 357 gfx::GLImage::CreateGLImageForGpuMemoryBuffer(buffer->GetNativeBuffer(), | 357 gfx::GLImage::CreateGLImageForGpuMemoryBuffer(buffer->GetNativeBuffer(), |
| 358 gfx::Size(width, height)); | 358 gfx::Size(width, height)); |
| 359 *image_id = ++next_id_; // Valid image_ids start from 1. | 359 *image_id = ++next_id_; // Valid image_ids start from 1. |
| 360 image_manager_->AddImage(gl_image, *image_id); | 360 image_manager_->AddImage(gl_image.get(), *image_id); |
| 361 return buffer.Pass(); | 361 return buffer.Pass(); |
| 362 } | 362 } |
| 363 | 363 |
| 364 void ImageFactoryInProcess::DeleteGpuMemoryBuffer(unsigned int image_id) { | 364 void ImageFactoryInProcess::DeleteGpuMemoryBuffer(unsigned int image_id) { |
| 365 // We're taking the lock here because we're accessing the ContextGroup's | 365 // We're taking the lock here because we're accessing the ContextGroup's |
| 366 // shared ImageManager. | 366 // shared ImageManager. |
| 367 AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(), | 367 AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(), |
| 368 g_all_shared_contexts.Get()); | 368 g_all_shared_contexts.Get()); |
| 369 image_manager_->RemoveImage(image_id); | 369 image_manager_->RemoveImage(image_id); |
| 370 } | 370 } |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 606 decoder_.get(), | 606 decoder_.get(), |
| 607 decoder_.get())); | 607 decoder_.get())); |
| 608 | 608 |
| 609 decoder_->set_engine(gpu_scheduler_.get()); | 609 decoder_->set_engine(gpu_scheduler_.get()); |
| 610 | 610 |
| 611 if (is_offscreen) | 611 if (is_offscreen) |
| 612 surface_ = gfx::GLSurface::CreateOffscreenGLSurface(false, size); | 612 surface_ = gfx::GLSurface::CreateOffscreenGLSurface(false, size); |
| 613 else | 613 else |
| 614 surface_ = gfx::GLSurface::CreateViewGLSurface(false, window); | 614 surface_ = gfx::GLSurface::CreateViewGLSurface(false, window); |
| 615 | 615 |
| 616 if (!surface_) { | 616 if (!surface_.get()) { |
| 617 LOG(ERROR) << "Could not create GLSurface."; | 617 LOG(ERROR) << "Could not create GLSurface."; |
| 618 Destroy(); | 618 Destroy(); |
| 619 return false; | 619 return false; |
| 620 } | 620 } |
| 621 | 621 |
| 622 if (g_use_virtualized_gl_context) { | 622 if (g_use_virtualized_gl_context) { |
| 623 context_ = share_group->GetSharedContext(); | 623 context_ = share_group->GetSharedContext(); |
| 624 if (!context_) { | 624 if (!context_.get()) { |
| 625 context_ = gfx::GLContext::CreateGLContext(share_group.get(), | 625 context_ = gfx::GLContext::CreateGLContext( |
| 626 surface_.get(), | 626 share_group.get(), surface_.get(), gpu_preference); |
| 627 gpu_preference); | 627 share_group->SetSharedContext(context_.get()); |
| 628 share_group->SetSharedContext(context_); | |
| 629 } | 628 } |
| 630 | 629 |
| 631 context_ = new ::gpu::GLContextVirtual(share_group.get(), | 630 context_ = new ::gpu::GLContextVirtual( |
| 632 context_, | 631 share_group.get(), context_.get(), decoder_->AsWeakPtr()); |
| 633 decoder_->AsWeakPtr()); | 632 if (context_->Initialize(surface_.get(), gpu_preference)) { |
| 634 if (context_->Initialize(surface_, gpu_preference)) { | |
| 635 VLOG(1) << "Created virtual GL context."; | 633 VLOG(1) << "Created virtual GL context."; |
| 636 } else { | 634 } else { |
| 637 context_ = NULL; | 635 context_ = NULL; |
| 638 } | 636 } |
| 639 } else { | 637 } else { |
| 640 context_ = gfx::GLContext::CreateGLContext(share_group.get(), | 638 context_ = gfx::GLContext::CreateGLContext(share_group.get(), |
| 641 surface_.get(), | 639 surface_.get(), |
| 642 gpu_preference); | 640 gpu_preference); |
| 643 } | 641 } |
| 644 | 642 |
| 645 if (!context_) { | 643 if (!context_.get()) { |
| 646 LOG(ERROR) << "Could not create GLContext."; | 644 LOG(ERROR) << "Could not create GLContext."; |
| 647 Destroy(); | 645 Destroy(); |
| 648 return false; | 646 return false; |
| 649 } | 647 } |
| 650 | 648 |
| 651 if (!context_->MakeCurrent(surface_)) { | 649 if (!context_->MakeCurrent(surface_.get())) { |
| 652 LOG(ERROR) << "Could not make context current."; | 650 LOG(ERROR) << "Could not make context current."; |
| 653 Destroy(); | 651 Destroy(); |
| 654 return false; | 652 return false; |
| 655 } | 653 } |
| 656 | 654 |
| 657 ::gpu::gles2::DisallowedFeatures disallowed_features; | 655 ::gpu::gles2::DisallowedFeatures disallowed_features; |
| 658 disallowed_features.swap_buffer_complete_callback = true; | 656 disallowed_features.swap_buffer_complete_callback = true; |
| 659 disallowed_features.gpu_memory_manager = true; | 657 disallowed_features.gpu_memory_manager = true; |
| 660 if (!decoder_->Initialize(surface_, | 658 if (!decoder_->Initialize(surface_, |
| 661 context_, | 659 context_, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 image_factory_ = new ImageFactoryInProcess(GetImageManager()); | 707 image_factory_ = new ImageFactoryInProcess(GetImageManager()); |
| 710 } | 708 } |
| 711 | 709 |
| 712 // Create the object exposing the OpenGL API. | 710 // Create the object exposing the OpenGL API. |
| 713 gles2_implementation_.reset(new GLES2Implementation( | 711 gles2_implementation_.reset(new GLES2Implementation( |
| 714 gles2_helper_.get(), | 712 gles2_helper_.get(), |
| 715 context_group ? context_group->GetImplementation()->share_group() : NULL, | 713 context_group ? context_group->GetImplementation()->share_group() : NULL, |
| 716 transfer_buffer_.get(), | 714 transfer_buffer_.get(), |
| 717 true, | 715 true, |
| 718 false, | 716 false, |
| 719 image_factory_)); | 717 image_factory_.get())); |
| 720 | 718 |
| 721 if (!gles2_implementation_->Initialize( | 719 if (!gles2_implementation_->Initialize( |
| 722 kStartTransferBufferSize, | 720 kStartTransferBufferSize, |
| 723 kMinTransferBufferSize, | 721 kMinTransferBufferSize, |
| 724 kMaxTransferBufferSize)) { | 722 kMaxTransferBufferSize)) { |
| 725 return false; | 723 return false; |
| 726 } | 724 } |
| 727 | 725 |
| 728 if (share_resources_) { | 726 if (share_resources_) { |
| 729 AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(), | 727 AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(), |
| (...skipping 1274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2004 DELEGATE_TO_GL_1(waitAsyncTexImage2DCHROMIUM, WaitAsyncTexImage2DCHROMIUM, | 2002 DELEGATE_TO_GL_1(waitAsyncTexImage2DCHROMIUM, WaitAsyncTexImage2DCHROMIUM, |
| 2005 WGC3Denum) | 2003 WGC3Denum) |
| 2006 | 2004 |
| 2007 void WebGraphicsContext3DInProcessCommandBufferImpl::SetGpuMemoryBufferCreator( | 2005 void WebGraphicsContext3DInProcessCommandBufferImpl::SetGpuMemoryBufferCreator( |
| 2008 GpuMemoryBufferCreator* creator) { | 2006 GpuMemoryBufferCreator* creator) { |
| 2009 g_gpu_memory_buffer_creator = creator; | 2007 g_gpu_memory_buffer_creator = creator; |
| 2010 } | 2008 } |
| 2011 | 2009 |
| 2012 } // namespace gpu | 2010 } // namespace gpu |
| 2013 } // namespace webkit | 2011 } // namespace webkit |
| OLD | NEW |