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

Unified Diff: webkit/plugins/ppapi/ppapi_plugin_instance.cc

Issue 7409003: Binding Graphics3D with Instance and OpenGLES2 interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 5 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/plugins/ppapi/ppapi_plugin_instance.h ('k') | webkit/plugins/ppapi/ppb_context_3d_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/plugins/ppapi/ppapi_plugin_instance.cc
===================================================================
--- webkit/plugins/ppapi/ppapi_plugin_instance.cc (revision 93075)
+++ webkit/plugins/ppapi/ppapi_plugin_instance.cc (working copy)
@@ -55,6 +55,7 @@
#include "webkit/plugins/ppapi/plugin_object.h"
#include "webkit/plugins/ppapi/ppb_buffer_impl.h"
#include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h"
+#include "webkit/plugins/ppapi/ppb_graphics_3d_impl.h"
#include "webkit/plugins/ppapi/ppb_image_data_impl.h"
#include "webkit/plugins/ppapi/ppb_input_event_impl.h"
#include "webkit/plugins/ppapi/ppb_surface_3d_impl.h"
@@ -89,6 +90,7 @@
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_Buffer_API;
using ppapi::thunk::PPB_Graphics2D_API;
+using ppapi::thunk::PPB_Graphics3D_API;
using ppapi::thunk::PPB_ImageData_API;
using ppapi::thunk::PPB_Instance_FunctionAPI;
using ppapi::thunk::PPB_Surface3D_API;
@@ -286,8 +288,8 @@
return;
}
- if (bound_graphics_2d())
- bound_graphics_2d()->Paint(canvas, plugin_rect, paint_rect);
+ if (GetBoundGraphics2D())
+ GetBoundGraphics2D()->Paint(canvas, plugin_rect, paint_rect);
}
void PluginInstance::InvalidateRect(const gfx::Rect& rect) {
@@ -321,10 +323,12 @@
}
unsigned PluginInstance::GetBackingTextureId() {
- if (!bound_graphics_3d())
- return 0;
+ if (GetBoundGraphics3D())
+ return GetBoundGraphics3D()->GetBackingTextureId();
+ else if (GetBoundSurface3D())
+ return GetBoundSurface3D()->GetBackingTextureId();
- return bound_graphics_3d()->GetBackingTextureId();
+ return 0;
}
void PluginInstance::CommitBackingTexture() {
@@ -546,19 +550,23 @@
}
void PluginInstance::ViewInitiatedPaint() {
- if (bound_graphics_2d())
- bound_graphics_2d()->ViewInitiatedPaint();
- if (bound_graphics_3d())
- bound_graphics_3d()->ViewInitiatedPaint();
+ if (GetBoundGraphics2D())
+ GetBoundGraphics2D()->ViewInitiatedPaint();
+ else if (GetBoundGraphics3D())
+ GetBoundGraphics3D()->ViewInitiatedPaint();
+ else if (GetBoundSurface3D())
+ GetBoundSurface3D()->ViewInitiatedPaint();
}
void PluginInstance::ViewFlushedPaint() {
// Keep a reference on the stack. See NOTE above.
scoped_refptr<PluginInstance> ref(this);
- if (bound_graphics_2d())
- bound_graphics_2d()->ViewFlushedPaint();
- if (bound_graphics_3d())
- bound_graphics_3d()->ViewFlushedPaint();
+ if (GetBoundGraphics2D())
+ GetBoundGraphics2D()->ViewFlushedPaint();
+ else if (GetBoundGraphics3D())
+ GetBoundGraphics3D()->ViewFlushedPaint();
+ else if (GetBoundSurface3D())
+ GetBoundSurface3D()->ViewFlushedPaint();
}
bool PluginInstance::GetBitmapForOptimizedPluginPaint(
@@ -568,13 +576,13 @@
gfx::Rect* clip) {
if (!always_on_top_)
return false;
- if (!bound_graphics_2d() || !bound_graphics_2d()->is_always_opaque())
+ if (!GetBoundGraphics2D() || !GetBoundGraphics2D()->is_always_opaque())
return false;
// We specifically want to compare against the area covered by the backing
// store when seeing if we cover the given paint bounds, since the backing
// store could be smaller than the declared plugin area.
- PPB_ImageData_Impl* image_data = bound_graphics_2d()->image_data();
+ PPB_ImageData_Impl* image_data = GetBoundGraphics2D()->image_data();
gfx::Rect plugin_backing_store_rect(position_.origin(),
gfx::Size(image_data->width(),
image_data->height()));
@@ -1260,7 +1268,7 @@
}
#endif // defined(OS_MACOSX) && !defined(USE_SKIA)
-PPB_Graphics2D_Impl* PluginInstance::bound_graphics_2d() const {
+PPB_Graphics2D_Impl* PluginInstance::GetBoundGraphics2D() const {
if (bound_graphics_.get() == NULL)
return NULL;
@@ -1269,10 +1277,19 @@
return NULL;
}
-PPB_Surface3D_Impl* PluginInstance::bound_graphics_3d() const {
+PPB_Graphics3D_Impl* PluginInstance::GetBoundGraphics3D() const {
if (bound_graphics_.get() == NULL)
return NULL;
+ if (bound_graphics_->AsPPB_Graphics3D_API())
+ return static_cast<PPB_Graphics3D_Impl*>(bound_graphics_.get());
+ return NULL;
+}
+
+PPB_Surface3D_Impl* PluginInstance::GetBoundSurface3D() const {
+ if (bound_graphics_.get() == NULL)
+ return NULL;
+
if (bound_graphics_->AsPPB_Surface3D_API())
return static_cast<PPB_Surface3D_Impl*>(bound_graphics_.get());
return NULL;
@@ -1345,33 +1362,38 @@
PP_Bool PluginInstance::BindGraphics(PP_Instance instance,
PP_Resource device) {
if (bound_graphics_.get()) {
- if (bound_graphics_2d()) {
- bound_graphics_2d()->BindToInstance(NULL);
- } else if (bound_graphics_.get()) {
- bound_graphics_3d()->BindToInstance(false);
+ if (GetBoundGraphics2D()) {
+ GetBoundGraphics2D()->BindToInstance(NULL);
+ } else if (GetBoundGraphics3D()) {
+ GetBoundGraphics3D()->BindToInstance(false);
+ } else if (GetBoundSurface3D()) {
+ GetBoundSurface3D()->BindToInstance(false);
}
- // Special-case clearing the current device.
- if (!device) {
- setBackingTextureId(0);
- InvalidateRect(gfx::Rect());
- }
+ bound_graphics_ = NULL;
}
- bound_graphics_ = NULL;
- if (!device)
+ // Special-case clearing the current device.
+ if (!device) {
+ setBackingTextureId(0);
+ InvalidateRect(gfx::Rect());
return PP_TRUE;
+ }
+ // Refuse to bind if we're transitioning to fullscreen.
+ if (fullscreen_container_ && !fullscreen_)
+ return PP_FALSE;
+
EnterResourceNoLock<PPB_Graphics2D_API> enter_2d(device, false);
PPB_Graphics2D_Impl* graphics_2d = enter_2d.succeeded() ?
static_cast<PPB_Graphics2D_Impl*>(enter_2d.object()) : NULL;
- EnterResourceNoLock<PPB_Surface3D_API> enter_3d(device, false);
- PPB_Surface3D_Impl* graphics_3d = enter_3d.succeeded() ?
- static_cast<PPB_Surface3D_Impl*>(enter_3d.object()) : NULL;
+ EnterResourceNoLock<PPB_Graphics3D_API> enter_3d(device, false);
+ PPB_Graphics3D_Impl* graphics_3d = enter_3d.succeeded() ?
+ static_cast<PPB_Graphics3D_Impl*>(enter_3d.object()) : NULL;
+ EnterResourceNoLock<PPB_Surface3D_API> enter_surface_3d(device, false);
+ PPB_Surface3D_Impl* surface_3d = enter_surface_3d.succeeded() ?
+ static_cast<PPB_Surface3D_Impl*>(enter_surface_3d.object()) : NULL;
if (graphics_2d) {
- // Refuse to bind if we're transitioning to fullscreen.
- if (fullscreen_container_ && !fullscreen_)
- return PP_FALSE;
if (graphics_2d->instance() != this)
return PP_FALSE; // Can't bind other instance's contexts.
if (!graphics_2d->BindToInstance(this))
@@ -1381,9 +1403,6 @@
setBackingTextureId(0);
// BindToInstance will have invalidated the plugin if necessary.
} else if (graphics_3d) {
- // Refuse to bind if we're transitioning to fullscreen.
- if (fullscreen_container_ && !fullscreen_)
- return PP_FALSE;
// Make sure graphics can only be bound to the instance it is
// associated with.
if (graphics_3d->instance() != this)
@@ -1391,8 +1410,18 @@
if (!graphics_3d->BindToInstance(true))
return PP_FALSE;
+ bound_graphics_ = graphics_3d;
setBackingTextureId(graphics_3d->GetBackingTextureId());
- bound_graphics_ = graphics_3d;
+ } else if (surface_3d) {
+ // Make sure graphics can only be bound to the instance it is
+ // associated with.
+ if (surface_3d->instance() != this)
+ return PP_FALSE;
+ if (!surface_3d->BindToInstance(true))
+ return PP_FALSE;
+
+ bound_graphics_ = surface_3d;
+ setBackingTextureId(surface_3d->GetBackingTextureId());
} else {
// The device is not a valid resource type.
return PP_FALSE;
« no previous file with comments | « webkit/plugins/ppapi/ppapi_plugin_instance.h ('k') | webkit/plugins/ppapi/ppb_context_3d_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698