| Index: content/renderer/gpu/mailbox_output_surface.cc
|
| diff --git a/content/renderer/gpu/mailbox_output_surface.cc b/content/renderer/gpu/mailbox_output_surface.cc
|
| index 6d384835bc90095caee3177518abce4f0b1a0d35..4c4b72155c7c7f3f2030d3a5433f134f16883f8e 100644
|
| --- a/content/renderer/gpu/mailbox_output_surface.cc
|
| +++ b/content/renderer/gpu/mailbox_output_surface.cc
|
| @@ -21,12 +21,12 @@ namespace content {
|
| MailboxOutputSurface::MailboxOutputSurface(
|
| int32 routing_id,
|
| uint32 output_surface_id,
|
| - WebGraphicsContext3DCommandBufferImpl* context3D,
|
| - cc::SoftwareOutputDevice* software_device)
|
| + const scoped_refptr<ContextProviderCommandBuffer>& context_provider,
|
| + scoped_ptr<cc::SoftwareOutputDevice> software_device)
|
| : CompositorOutputSurface(routing_id,
|
| output_surface_id,
|
| - context3D,
|
| - software_device,
|
| + context_provider,
|
| + software_device.Pass(),
|
| true),
|
| fbo_(0),
|
| is_backbuffer_discarded_(false) {
|
| @@ -37,8 +37,10 @@ MailboxOutputSurface::MailboxOutputSurface(
|
| MailboxOutputSurface::~MailboxOutputSurface() {
|
| DiscardBackbuffer();
|
| while (!pending_textures_.empty()) {
|
| - if (pending_textures_.front().texture_id)
|
| - context3d_->deleteTexture(pending_textures_.front().texture_id);
|
| + if (pending_textures_.front().texture_id) {
|
| + context_provider_->Context3d()->deleteTexture(
|
| + pending_textures_.front().texture_id);
|
| + }
|
| pending_textures_.pop_front();
|
| }
|
| }
|
| @@ -46,6 +48,8 @@ MailboxOutputSurface::~MailboxOutputSurface() {
|
| void MailboxOutputSurface::EnsureBackbuffer() {
|
| is_backbuffer_discarded_ = false;
|
|
|
| + WebKit::WebGraphicsContext3D* context3d = context_provider_->Context3d();
|
| +
|
| if (!current_backing_.texture_id) {
|
| // Find a texture of matching size to recycle.
|
| while (!returned_textures_.empty()) {
|
| @@ -53,33 +57,33 @@ void MailboxOutputSurface::EnsureBackbuffer() {
|
| if (texture.size == surface_size_) {
|
| current_backing_ = texture;
|
| if (current_backing_.sync_point)
|
| - context3d_->waitSyncPoint(current_backing_.sync_point);
|
| + context3d->waitSyncPoint(current_backing_.sync_point);
|
| returned_textures_.pop();
|
| break;
|
| }
|
|
|
| - context3d_->deleteTexture(texture.texture_id);
|
| + context3d->deleteTexture(texture.texture_id);
|
| returned_textures_.pop();
|
| }
|
|
|
| if (!current_backing_.texture_id) {
|
| - current_backing_.texture_id = context3d_->createTexture();
|
| + current_backing_.texture_id = context3d->createTexture();
|
| current_backing_.size = surface_size_;
|
| - context3d_->bindTexture(GL_TEXTURE_2D, current_backing_.texture_id);
|
| - context3d_->texParameteri(
|
| + context3d->bindTexture(GL_TEXTURE_2D, current_backing_.texture_id);
|
| + context3d->texParameteri(
|
| GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
| - context3d_->texParameteri(
|
| + context3d->texParameteri(
|
| GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
| - context3d_->texParameteri(
|
| + context3d->texParameteri(
|
| GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
| - context3d_->texParameteri(
|
| + context3d->texParameteri(
|
| GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
| - context3d_->texImage2D(
|
| + context3d->texImage2D(
|
| GL_TEXTURE_2D, 0, GL_RGBA,
|
| surface_size_.width(), surface_size_.height(), 0,
|
| GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
| - context3d_->genMailboxCHROMIUM(current_backing_.mailbox.name);
|
| - context3d_->produceTextureCHROMIUM(
|
| + context3d->genMailboxCHROMIUM(current_backing_.mailbox.name);
|
| + context3d->produceTextureCHROMIUM(
|
| GL_TEXTURE_2D, current_backing_.mailbox.name);
|
| }
|
| }
|
| @@ -88,20 +92,22 @@ void MailboxOutputSurface::EnsureBackbuffer() {
|
| void MailboxOutputSurface::DiscardBackbuffer() {
|
| is_backbuffer_discarded_ = true;
|
|
|
| + WebKit::WebGraphicsContext3D* context3d = context_provider_->Context3d();
|
| +
|
| if (current_backing_.texture_id) {
|
| - context3d_->deleteTexture(current_backing_.texture_id);
|
| + context3d->deleteTexture(current_backing_.texture_id);
|
| current_backing_ = TransferableFrame();
|
| }
|
|
|
| while (!returned_textures_.empty()) {
|
| const TransferableFrame& frame = returned_textures_.front();
|
| - context3d_->deleteTexture(frame.texture_id);
|
| + context3d->deleteTexture(frame.texture_id);
|
| returned_textures_.pop();
|
| }
|
|
|
| if (fbo_) {
|
| - context3d_->bindFramebuffer(GL_FRAMEBUFFER, fbo_);
|
| - context3d_->deleteFramebuffer(fbo_);
|
| + context3d->bindFramebuffer(GL_FRAMEBUFFER, fbo_);
|
| + context3d->deleteFramebuffer(fbo_);
|
| fbo_ = 0;
|
| }
|
| }
|
| @@ -120,10 +126,12 @@ void MailboxOutputSurface::BindFramebuffer() {
|
| EnsureBackbuffer();
|
| DCHECK(current_backing_.texture_id);
|
|
|
| + WebKit::WebGraphicsContext3D* context3d = context_provider_->Context3d();
|
| +
|
| if (!fbo_)
|
| - fbo_ = context3d_->createFramebuffer();
|
| - context3d_->bindFramebuffer(GL_FRAMEBUFFER, fbo_);
|
| - context3d_->framebufferTexture2D(
|
| + fbo_ = context3d->createFramebuffer();
|
| + context3d->bindFramebuffer(GL_FRAMEBUFFER, fbo_);
|
| + context3d->framebufferTexture2D(
|
| GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
|
| current_backing_.texture_id, 0);
|
| }
|
| @@ -156,7 +164,7 @@ void MailboxOutputSurface::OnSwapAck(uint32 output_surface_id,
|
| if (!is_backbuffer_discarded_) {
|
| returned_textures_.push(*it);
|
| } else {
|
| - context3d_->deleteTexture(it->texture_id);
|
| + context_provider_->Context3d()->deleteTexture(it->texture_id);
|
| }
|
|
|
| pending_textures_.erase(it);
|
| @@ -167,7 +175,7 @@ void MailboxOutputSurface::OnSwapAck(uint32 output_surface_id,
|
| // the oldest texture we sent.
|
| uint32 texture_id = pending_textures_.front().texture_id;
|
| if (texture_id)
|
| - context3d_->deleteTexture(texture_id);
|
| + context_provider_->Context3d()->deleteTexture(texture_id);
|
| pending_textures_.pop_front();
|
| }
|
| CompositorOutputSurface::OnSwapAck(output_surface_id, ack);
|
| @@ -178,11 +186,13 @@ void MailboxOutputSurface::SwapBuffers(cc::CompositorFrame* frame) {
|
| DCHECK(!surface_size_.IsEmpty());
|
| DCHECK(surface_size_ == current_backing_.size);
|
| DCHECK(frame->gl_frame_data->size == current_backing_.size);
|
| - DCHECK(!current_backing_.mailbox.IsZero() || context3d_->isContextLost());
|
| + DCHECK(!current_backing_.mailbox.IsZero() ||
|
| + context_provider_->Context3d()->isContextLost());
|
|
|
| frame->gl_frame_data->mailbox = current_backing_.mailbox;
|
| - context3d_->flush();
|
| - frame->gl_frame_data->sync_point = context3d_->insertSyncPoint();
|
| + context_provider_->Context3d()->flush();
|
| + frame->gl_frame_data->sync_point =
|
| + context_provider_->Context3d()->insertSyncPoint();
|
| CompositorOutputSurface::SwapBuffers(frame);
|
|
|
| pending_textures_.push_back(current_backing_);
|
|
|