Index: ppapi/proxy/ppb_instance_proxy.cc |
diff --git a/ppapi/proxy/ppb_instance_proxy.cc b/ppapi/proxy/ppb_instance_proxy.cc |
index 4f64e917af4413db9697ca6a3a7fc373d596b53d..7169ee4498d977bd56b1176c03de7ab0579da30c 100644 |
--- a/ppapi/proxy/ppb_instance_proxy.cc |
+++ b/ppapi/proxy/ppb_instance_proxy.cc |
@@ -216,37 +216,44 @@ PP_Bool PPB_Instance_Proxy::BindGraphics(PP_Instance instance, |
PP_Resource device) { |
// If device is 0, pass a null HostResource. This signals the host to unbind |
// all devices. |
- HostResource host_resource; |
PP_Resource pp_resource = 0; |
if (device) { |
- Resource* resource = |
- PpapiGlobals::Get()->GetResourceTracker()->GetResource(device); |
- if (!resource || resource->pp_instance() != instance) |
+ do { |
+ // Try enter device as a Graphics3D deivce. |
+ EnterResourceNoLock<PPB_Graphics3D_API> enter_3d(device, false); |
+ if (enter_3d.succeeded()) { |
+ if (enter_3d.resource()->pp_instance() != instance) |
+ return PP_FALSE; |
+ pp_resource = enter_3d.resource()->host_resource().host_resource(); |
+ break; |
+ } |
+ |
+ // Try enter device as a Graphics2D device. |
+ EnterResourceNoLock<PPB_Graphics2D_API> enter_2d(device, false); |
+ if (enter_2d.succeeded()) { |
+ if (enter_2d.resource()->pp_instance() != instance) |
+ return PP_FALSE; |
+ pp_resource = enter_2d.resource()->pp_resource(); |
+ break; |
+ } |
+ |
+ // Try enter device as a Compositor device. |
+ EnterResourceNoLock<PPB_Compositor_API> enter_compositor(device, false); |
+ if (enter_compositor.succeeded()) { |
+ if (enter_compositor.resource()->pp_instance() != instance) |
+ return PP_FALSE; |
+ pp_resource = enter_compositor.resource()->pp_resource(); |
+ break; |
+ } |
+ |
return PP_FALSE; |
- host_resource = resource->host_resource(); |
- pp_resource = resource->pp_resource(); |
- } else { |
- // Passing 0 means unbinding all devices. |
- dispatcher()->Send(new PpapiHostMsg_PPBInstance_BindGraphics( |
- API_ID_PPB_INSTANCE, instance, 0)); |
- return PP_TRUE; |
+ } while (false); |
piman
2014/06/19 20:44:04
This is not needed any more, right?
Peng
2014/06/19 22:33:41
It is not necessary anymore, but it is an improvem
|
} |
- // We need to pass different resource to Graphics 2D and 3D right now. Once |
- // 3D is migrated to the new design, we should be able to unify this. |
- EnterResourceNoLock<PPB_Compositor_API> enter_compositor(device, false); |
- EnterResourceNoLock<PPB_Graphics2D_API> enter_2d(device, false); |
- EnterResourceNoLock<PPB_Graphics3D_API> enter_3d(device, false); |
- if (enter_compositor.succeeded() || enter_2d.succeeded()) { |
- dispatcher()->Send(new PpapiHostMsg_PPBInstance_BindGraphics( |
+ dispatcher()->Send(new PpapiHostMsg_PPBInstance_BindGraphics( |
API_ID_PPB_INSTANCE, instance, pp_resource)); |
- return PP_TRUE; |
- } else if (enter_3d.succeeded()) { |
- dispatcher()->Send(new PpapiHostMsg_PPBInstance_BindGraphics( |
- API_ID_PPB_INSTANCE, instance, host_resource.host_resource())); |
- return PP_TRUE; |
- } |
- return PP_FALSE; |
+ |
+ return PP_TRUE; |
} |
PP_Bool PPB_Instance_Proxy::IsFullFrame(PP_Instance instance) { |