diff options
author | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-05 01:54:06 +0000 |
---|---|---|
committer | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-05 01:54:06 +0000 |
commit | a9a430111290193028dc2b39be75c176d49d7bd3 (patch) | |
tree | 4b28a94aed9596ff8bcaf5f67b1e9273ece1c40f /chrome/renderer/ggl | |
parent | 0f8805d56674fff8ef79abd0981a3ede8b79190d (diff) | |
download | chromium_src-a9a430111290193028dc2b39be75c176d49d7bd3.zip chromium_src-a9a430111290193028dc2b39be75c176d49d7bd3.tar.gz chromium_src-a9a430111290193028dc2b39be75c176d49d7bd3.tar.bz2 |
Revert 65152 - Integrated Pepper3D v2 with the accelerated compositor.
- It now uses GGL instead of a child window.
- Fixed a bug where GLES2 decoder set texture state without updating TextureInfo.
- Fixed Pepper3D demos and added awesome 3D CSS programmer art.
- Removed ggl::GetCurrentContext to prevent further abuse. Fixed said abuse :)
- GGL exposes GLES2Implementation to allow issue of GL calls on a particular context without making that context globally current.
- Removed redundant "this context" argument from GGL SwapBuffers completion callback.
- Temporarily removed context lost notification. I need to figure out the best semantics.
TEST=Run Pepper3D and WebGL demos and YouTube videos on Windows and Mac.
BUG=none
Review URL: http://codereview.chromium.org/3531008
TBR=apatrick@chromium.org
Review URL: http://codereview.chromium.org/4561001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65169 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/ggl')
-rw-r--r-- | chrome/renderer/ggl/ggl.cc | 50 | ||||
-rw-r--r-- | chrome/renderer/ggl/ggl.h | 18 |
2 files changed, 31 insertions, 37 deletions
diff --git a/chrome/renderer/ggl/ggl.cc b/chrome/renderer/ggl/ggl.cc index cfe6743..0589852 100644 --- a/chrome/renderer/ggl/ggl.cc +++ b/chrome/renderer/ggl/ggl.cc @@ -6,6 +6,7 @@ #include "base/ref_counted.h" #include "base/singleton.h" +#include "base/thread_local.h" #include "base/weak_ptr.h" #include "chrome/renderer/command_buffer_proxy.h" #include "chrome/renderer/ggl/ggl.h" @@ -34,6 +35,8 @@ const int32 kCommandBufferSize = 1024 * 1024; // creation attributes. const int32 kTransferBufferSize = 1024 * 1024; +base::ThreadLocalPointer<Context> g_current_context; + // Singleton used to initialize and terminate the gles2 library. class GLES2Initializer { public: @@ -74,7 +77,7 @@ class Context : public base::SupportsWeakPtr<Context> { // Provides a callback that will be invoked when SwapBuffers has completed // service side. - void SetSwapBuffersCallback(Callback0::Type* callback) { + void SetSwapBuffersCallback(Callback1<Context*>::Type* callback) { swap_buffers_callback_.reset(callback); } @@ -114,22 +117,17 @@ class Context : public base::SupportsWeakPtr<Context> { // TODO(gman): Remove this. void DisableShaderTranslation(); - gpu::gles2::GLES2Implementation* gles2_implementation() const { - return gles2_implementation_; - } private: void OnSwapBuffers(); scoped_refptr<GpuChannelHost> channel_; base::WeakPtr<Context> parent_; - scoped_ptr<Callback0::Type> swap_buffers_callback_; + scoped_ptr<Callback1<Context*>::Type> swap_buffers_callback_; uint32 parent_texture_id_; CommandBufferProxy* command_buffer_; gpu::gles2::GLES2CmdHelper* gles2_helper_; int32 transfer_buffer_id_; gpu::gles2::GLES2Implementation* gles2_implementation_; - gfx::Size size_; - Error last_error_; DISALLOW_COPY_AND_ASSIGN(Context); @@ -264,25 +262,19 @@ bool Context::Initialize(gfx::NativeViewId view, transfer_buffer_id_, false); - size_ = size; - return true; } #if defined(OS_MACOSX) void Context::ResizeOnscreen(const gfx::Size& size) { DCHECK(size.width() > 0 && size.height() > 0); - size_ = size; command_buffer_->SetWindowSize(size); } #endif void Context::ResizeOffscreen(const gfx::Size& size) { DCHECK(size.width() > 0 && size.height() > 0); - if (size_ != size) { - command_buffer_->ResizeOffscreenFrameBuffer(size); - size_ = size; - } + command_buffer_->ResizeOffscreenFrameBuffer(size); } uint32 Context::CreateParentTexture(const gfx::Size& size) const { @@ -351,6 +343,7 @@ void Context::Destroy() { } bool Context::MakeCurrent(Context* context) { + g_current_context.Set(context); if (context) { gles2::SetGLContext(context->gles2_implementation_); @@ -412,7 +405,7 @@ void Context::DisableShaderTranslation() { void Context::OnSwapBuffers() { if (swap_buffers_callback_.get()) - swap_buffers_callback_->Run(); + swap_buffers_callback_->Run(this); } #endif // ENABLE_GPU @@ -487,7 +480,7 @@ void DeleteParentTexture(Context* context, uint32 texture) { } void SetSwapBuffersCallback(Context* context, - Callback0::Type* callback) { + Callback1<Context*>::Type* callback) { #if defined(ENABLE_GPU) context->SetSwapBuffersCallback(callback); #endif @@ -501,6 +494,14 @@ bool MakeCurrent(Context* context) { #endif } +Context* GetCurrentContext() { +#if defined(ENABLE_GPU) + return g_current_context.Get(); +#else + return NULL; +#endif +} + bool SwapBuffers(Context* context) { #if defined(ENABLE_GPU) if (!context) @@ -517,6 +518,9 @@ bool DestroyContext(Context* context) { if (!context) return false; + if (context == GetCurrentContext()) + MakeCurrent(NULL); + delete context; return true; #else @@ -533,8 +537,12 @@ media::VideoDecodeContext* CreateVideoDecodeContext( return context->CreateVideoDecodeContext(message_loop, hardware_decoder); } -Error GetError(Context* context) { +Error GetError() { #if defined(ENABLE_GPU) + Context* context = GetCurrentContext(); + if (!context) + return BAD_CONTEXT; + return context->GetError(); #else return NOT_INITIALIZED; @@ -549,12 +557,4 @@ void DisableShaderTranslation(Context* context) { } #endif } - -gpu::gles2::GLES2Implementation* GetImplementation(Context* context) { - if (!context) - return NULL; - - return context->gles2_implementation(); -} - } // namespace ggl diff --git a/chrome/renderer/ggl/ggl.h b/chrome/renderer/ggl/ggl.h index 54a7f8e..1d53f57 100644 --- a/chrome/renderer/ggl/ggl.h +++ b/chrome/renderer/ggl/ggl.h @@ -18,12 +18,6 @@ class GpuChannelHost; class MessageLoop; -namespace gpu { -namespace gles2 { -class GLES2Implementation; -} -} - namespace media { class VideoDecodeContext; class VideoDecodeEngine; @@ -126,11 +120,15 @@ void DeleteParentTexture(Context* context, uint32 texture); // Provides a callback that will be invoked when SwapBuffers has completed // service side. -void SetSwapBuffersCallback(Context* context, Callback0::Type* callback); +void SetSwapBuffersCallback(Context* context, + Callback1<Context*>::Type* callback); // Set the current GGL context for the calling thread. bool MakeCurrent(Context* context); +// Get the calling thread's current GGL context. +Context* GetCurrentContext(); + // For a view context, display everything that has been rendered since the // last call. For an offscreen context, resolve everything that has been // rendered since the last call to a copy that can be accessed by the parent @@ -155,12 +153,8 @@ media::VideoDecodeContext* CreateVideoDecodeContext(Context* context, // TODO(gman): Remove this void DisableShaderTranslation(Context* context); -// Allows direct access to the GLES2 implementation so a context -// can be used without making it current. -gpu::gles2::GLES2Implementation* GetImplementation(Context* context); - // Return the current GGL error. -Error GetError(Context* context); +Error GetError(); } // namespace ggl |