| 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 5e0b5f326414165d8f3381cd8eafe33ed3ddaa0d..927d10bbe7abd657a6c56cc9352b8ef95af763dd 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
|
| @@ -158,7 +170,9 @@ gpu::GpuControl* PPB_Graphics3D_Impl::GetGpuControl() {
|
| return command_buffer_.get();
|
| }
|
|
|
| -int32_t PPB_Graphics3D_Impl::DoSwapBuffers(const gpu::SyncToken& sync_token) {
|
| +int32_t PPB_Graphics3D_Impl::DoSwapBuffers(const gpu::SyncToken& sync_token,
|
| + int32_t width,
|
| + int32_t height) {
|
| DCHECK(command_buffer_);
|
| if (taken_front_buffer_.IsZero()) {
|
| DLOG(ERROR) << "TakeFrontBuffer should be called before DoSwapBuffers";
|
| @@ -173,8 +187,16 @@ 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);
|
| + if (width < 0 || height < 0) {
|
| + width = original_width_;
|
| + height = original_height_;
|
| + }
|
| + 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),
|
| + is_overlay_candidate, false);
|
| taken_front_buffer_.SetZero();
|
| HostGlobals::Get()
|
| ->GetInstance(pp_instance())
|
| @@ -260,6 +282,7 @@ bool PPB_Graphics3D_Impl::InitRaw(PPB_Graphics3D_API* share_context,
|
| }
|
| 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) {
|
| @@ -272,6 +295,8 @@ bool PPB_Graphics3D_Impl::InitRaw(PPB_Graphics3D_API* share_context,
|
| std::move(channel), gpu::kNullSurfaceHandle, share_buffer,
|
| gpu::GPU_STREAM_DEFAULT, gpu::GpuStreamPriority::NORMAL, attrib_helper,
|
| GURL::EmptyGURL(), base::ThreadTaskRunnerHandle::Get());
|
| + original_width_ = attrib_helper.offscreen_framebuffer_size.width();
|
| + original_height_ = attrib_helper.offscreen_framebuffer_size.height();
|
| if (!command_buffer_)
|
| return false;
|
|
|
|
|