Index: webkit/plugins/ppapi/ppb_graphics_3d_impl.cc |
=================================================================== |
--- webkit/plugins/ppapi/ppb_graphics_3d_impl.cc (revision 0) |
+++ webkit/plugins/ppapi/ppb_graphics_3d_impl.cc (working copy) |
@@ -2,29 +2,28 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "webkit/glue/plugins/pepper_graphics_3d.h" |
+#include "webkit/plugins/ppapi/ppb_graphics_3d_impl.h" |
#include "gpu/command_buffer/common/command_buffer.h" |
-#include "base/singleton.h" |
+#include "base/lazy_instance.h" |
#include "base/thread_local.h" |
#include "ppapi/c/dev/ppb_graphics_3d_dev.h" |
-#include "webkit/glue/plugins/pepper_common.h" |
-#include "webkit/glue/plugins/pepper_plugin_instance.h" |
+#include "webkit/plugins/ppapi/common.h" |
+#include "webkit/plugins/ppapi/plugin_instance.h" |
-namespace pepper { |
+namespace webkit { |
+namespace ppapi { |
namespace { |
-struct CurrentContextTag {}; |
-typedef Singleton<base::ThreadLocalPointer<Graphics3D>, |
- DefaultSingletonTraits<base::ThreadLocalPointer<Graphics3D> >, |
- CurrentContextTag> CurrentContextKey; |
+static base::LazyInstance<base::ThreadLocalPointer<PPB_Graphics3D_Impl> > |
+ g_current_context_key(base::LINKER_INITIALIZED); |
// Size of the transfer buffer. |
enum { kTransferBufferSize = 512 * 1024 }; |
PP_Bool IsGraphics3D(PP_Resource resource) { |
- return BoolToPPBool(!!Resource::GetAs<Graphics3D>(resource)); |
+ return BoolToPPBool(!!Resource::GetAs<PPB_Graphics3D_Impl>(resource)); |
} |
PP_Bool GetConfigs(int32_t* configs, int32_t config_size, int32_t* num_config) { |
@@ -68,7 +67,8 @@ |
return 0; |
} |
- scoped_refptr<Graphics3D> context(new Graphics3D(instance->module())); |
+ scoped_refptr<PPB_Graphics3D_Impl> context( |
+ new PPB_Graphics3D_Impl(instance->module())); |
if (!context->Init(instance_id, config, attrib_list)) { |
return 0; |
} |
@@ -83,21 +83,23 @@ |
PP_Bool MakeCurrent(PP_Resource graphics3d) { |
if (!graphics3d) { |
- Graphics3D::ResetCurrent(); |
+ PPB_Graphics3D_Impl::ResetCurrent(); |
return PP_TRUE; |
} else { |
- scoped_refptr<Graphics3D> context(Resource::GetAs<Graphics3D>(graphics3d)); |
+ scoped_refptr<PPB_Graphics3D_Impl> context( |
+ Resource::GetAs<PPB_Graphics3D_Impl>(graphics3d)); |
return BoolToPPBool(context.get() && context->MakeCurrent()); |
} |
} |
PP_Resource GetCurrentContext() { |
- Graphics3D* current_context = Graphics3D::GetCurrent(); |
+ PPB_Graphics3D_Impl* current_context = PPB_Graphics3D_Impl::GetCurrent(); |
return current_context ? current_context->GetReference() : 0; |
} |
PP_Bool SwapBuffers(PP_Resource graphics3d) { |
- scoped_refptr<Graphics3D> context(Resource::GetAs<Graphics3D>(graphics3d)); |
+ scoped_refptr<PPB_Graphics3D_Impl> context( |
+ Resource::GetAs<PPB_Graphics3D_Impl>(graphics3d)); |
return BoolToPPBool(context && context->SwapBuffers()); |
} |
@@ -105,7 +107,7 @@ |
// Technically, this should return the last error that occurred on the current |
// thread, rather than an error associated with a particular context. |
// TODO(apatrick): Fix this. |
- Graphics3D* current_context = Graphics3D::GetCurrent(); |
+ PPB_Graphics3D_Impl* current_context = PPB_Graphics3D_Impl::GetCurrent(); |
if (!current_context) |
return 0; |
@@ -128,29 +130,33 @@ |
} // namespace |
-Graphics3D::Graphics3D(PluginModule* module) |
+PPB_Graphics3D_Impl::PPB_Graphics3D_Impl(PluginModule* module) |
: Resource(module), |
bound_instance_(NULL) { |
} |
-const PPB_Graphics3D_Dev* Graphics3D::GetInterface() { |
+const PPB_Graphics3D_Dev* PPB_Graphics3D_Impl::GetInterface() { |
return &ppb_graphics3d; |
} |
-Graphics3D* Graphics3D::GetCurrent() { |
- return CurrentContextKey::get()->Get(); |
+PPB_Graphics3D_Impl* PPB_Graphics3D_Impl::GetCurrent() { |
+ return g_current_context_key.Get().Get(); |
} |
-void Graphics3D::ResetCurrent() { |
- CurrentContextKey::get()->Set(NULL); |
+void PPB_Graphics3D_Impl::ResetCurrent() { |
+ g_current_context_key.Get().Set(NULL); |
} |
-Graphics3D::~Graphics3D() { |
+PPB_Graphics3D_Impl::~PPB_Graphics3D_Impl() { |
Destroy(); |
} |
-bool Graphics3D::Init(PP_Instance instance_id, int32_t config, |
- const int32_t* attrib_list) { |
+PPB_Graphics3D_Impl* PPB_Graphics3D_Impl::AsPPB_Graphics3D_Impl() { |
+ return this; |
+} |
+ |
+bool PPB_Graphics3D_Impl::Init(PP_Instance instance_id, int32_t config, |
+ const int32_t* attrib_list) { |
PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); |
if (!instance) { |
return false; |
@@ -174,7 +180,7 @@ |
return true; |
} |
-bool Graphics3D::BindToInstance(PluginInstance* new_instance) { |
+bool PPB_Graphics3D_Impl::BindToInstance(PluginInstance* new_instance) { |
if (bound_instance_ == new_instance) |
return true; // Rebinding the same device, nothing to do. |
if (bound_instance_ && new_instance) |
@@ -197,52 +203,52 @@ |
return true; |
} |
-bool Graphics3D::MakeCurrent() { |
+bool PPB_Graphics3D_Impl::MakeCurrent() { |
if (!platform_context_.get()) |
return false; |
- CurrentContextKey::get()->Set(this); |
+ g_current_context_key.Get().Set(this); |
// TODO(apatrick): Return false on context lost. |
return true; |
} |
-bool Graphics3D::SwapBuffers() { |
+bool PPB_Graphics3D_Impl::SwapBuffers() { |
if (!platform_context_.get()) |
return false; |
return platform_context_->SwapBuffers(); |
} |
-unsigned Graphics3D::GetError() { |
+unsigned PPB_Graphics3D_Impl::GetError() { |
if (!platform_context_.get()) |
return 0; |
return platform_context_->GetError(); |
} |
-void Graphics3D::ResizeBackingTexture(const gfx::Size& size) { |
+void PPB_Graphics3D_Impl::ResizeBackingTexture(const gfx::Size& size) { |
if (!platform_context_.get()) |
return; |
platform_context_->ResizeBackingTexture(size); |
} |
-void Graphics3D::SetSwapBuffersCallback(Callback0::Type* callback) { |
+void PPB_Graphics3D_Impl::SetSwapBuffersCallback(Callback0::Type* callback) { |
if (!platform_context_.get()) |
return; |
platform_context_->SetSwapBuffersCallback(callback); |
} |
-unsigned Graphics3D::GetBackingTextureId() { |
+unsigned PPB_Graphics3D_Impl::GetBackingTextureId() { |
if (!platform_context_.get()) |
return 0; |
return platform_context_->GetBackingTextureId(); |
} |
-void Graphics3D::Destroy() { |
+void PPB_Graphics3D_Impl::Destroy() { |
if (GetCurrent() == this) { |
ResetCurrent(); |
} |
@@ -252,5 +258,6 @@ |
platform_context_.reset(); |
} |
-} // namespace pepper |
+} // namespace ppapi |
+} // namespace webkit |