Chromium Code Reviews| Index: content/renderer/pepper/ppb_graphics_3d_impl.cc |
| diff --git a/content/renderer/pepper/ppb_graphics_3d_impl.cc b/content/renderer/pepper/ppb_graphics_3d_impl.cc |
| index 94207f0387dab520c7f84cf59432fe162f9c207f..c0c9fa642638d9beafce42fbc7d1fe487a294af4 100644 |
| --- a/content/renderer/pepper/ppb_graphics_3d_impl.cc |
| +++ b/content/renderer/pepper/ppb_graphics_3d_impl.cc |
| @@ -18,6 +18,7 @@ |
| #include "content/renderer/pepper/plugin_module.h" |
| #include "content/renderer/render_thread_impl.h" |
| #include "content/renderer/render_view_impl.h" |
| +#include "gpu/GLES2/gl2extchromium.h" |
| #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| #include "gpu/ipc/client/command_buffer_proxy_impl.h" |
| #include "gpu/ipc/client/gpu_channel_host.h" |
| @@ -44,7 +45,18 @@ PPB_Graphics3D_Impl::PPB_Graphics3D_Impl(PP_Instance instance) |
| bound_to_instance_(false), |
| commit_pending_(false), |
| has_alpha_(false), |
| - weak_ptr_factory_(this) {} |
| + use_image_chromium_(false), |
| + weak_ptr_factory_(this) { |
| +#if defined(OS_MACOSX) |
| + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| + bool use_image_chromium = |
| + !command_line->HasSwitch(switches::kDisablePepper3DImageChromium); |
| + use_image_chromium_ = use_image_chromium; |
| + |
| + // TODO(erikchen): Remove this line to enable the feature. |
| + use_image_chromium_ = false; |
| +#endif |
| +} |
| PPB_Graphics3D_Impl::~PPB_Graphics3D_Impl() { |
| // Unset the client before the command_buffer_ is destroyed, similar to how |
| @@ -173,8 +185,12 @@ int32_t PPB_Graphics3D_Impl::DoSwapBuffers(const gpu::SyncToken& sync_token) { |
| // |
| // Don't need to check for NULL from GetPluginInstance since when we're |
| // bound, we know our instance is valid. |
| - cc::TextureMailbox texture_mailbox(taken_front_buffer_, sync_token, |
| - GL_TEXTURE_2D); |
| + bool is_overlay_candidate = use_image_chromium_; |
| + GLenum target = |
| + is_overlay_candidate ? GL_TEXTURE_RECTANGLE_ARB : GL_TEXTURE_2D; |
| + cc::TextureMailbox texture_mailbox(taken_front_buffer_, sync_token, target, |
| + gfx::Size(width(), height()), |
|
piman
2016/06/28 20:51:41
The size will be wrong here.
PPB_Graphics3D_Share
|
| + is_overlay_candidate, false); |
| taken_front_buffer_.SetZero(); |
| HostGlobals::Get() |
| ->GetInstance(pp_instance()) |
| @@ -261,6 +277,7 @@ bool PPB_Graphics3D_Impl::InitRaw(PPB_Graphics3D_API* share_context, |
| gpu::gles2::ContextCreationAttribHelper attrib_helper; |
| if (!attrib_helper.Parse(attribs)) |
| return false; |
| + attrib_helper.should_use_native_gmb_for_backbuffer = use_image_chromium_; |
| gpu::CommandBufferProxyImpl* share_buffer = NULL; |
| if (share_context) { |
| @@ -274,6 +291,7 @@ bool PPB_Graphics3D_Impl::InitRaw(PPB_Graphics3D_API* share_context, |
| gpu::GPU_STREAM_DEFAULT, gpu::GpuStreamPriority::NORMAL, |
| attrib_helper, GURL::EmptyGURL(), gpu_preference, |
| base::ThreadTaskRunnerHandle::Get()); |
| + SetSize(surface_size.width(), surface_size.height()); |
| if (!command_buffer_) |
| return false; |