Index: third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp |
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp |
index 97ce92b3bf37d2c2845621bba2c821bd51665e47..155558732ef1c1bfd811b51a7aaa3b5d72de3334 100644 |
--- a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp |
@@ -37,7 +37,6 @@ |
#include "gpu/command_buffer/client/gles2_interface.h" |
#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" |
#include "gpu/command_buffer/common/capabilities.h" |
-#include "gpu/command_buffer/common/gpu_memory_buffer_support.h" |
#include "platform/RuntimeEnabledFeatures.h" |
#include "platform/graphics/AcceleratedStaticBitmapImage.h" |
#include "platform/graphics/GraphicsLayer.h" |
@@ -532,22 +531,15 @@ DrawingBuffer::GpuMemoryBufferColorBufferParameters() { |
parameters.target = GC3D_TEXTURE_RECTANGLE_ARB; |
if (want_alpha_channel_) { |
- parameters.creation_internal_color_format = GL_RGBA; |
- parameters.internal_color_format = GL_RGBA; |
+ parameters.allocate_alpha_channel = true; |
} else if (ContextProvider() |
->GetCapabilities() |
.chromium_image_rgb_emulation) { |
- parameters.creation_internal_color_format = GL_RGB; |
- parameters.internal_color_format = GL_RGBA; |
+ parameters.allocate_alpha_channel = false; |
} else { |
- GLenum format = |
- DefaultBufferRequiresAlphaChannelToBePreserved() ? GL_RGBA : GL_RGB; |
- parameters.creation_internal_color_format = format; |
- parameters.internal_color_format = format; |
+ parameters.allocate_alpha_channel = |
+ DefaultBufferRequiresAlphaChannelToBePreserved(); |
} |
- |
- // Unused when CHROMIUM_image is being used. |
- parameters.color_format = 0; |
return parameters; |
#else |
return TextureColorBufferParameters(); |
@@ -559,21 +551,14 @@ DrawingBuffer::TextureColorBufferParameters() { |
ColorBufferParameters parameters; |
parameters.target = GL_TEXTURE_2D; |
if (want_alpha_channel_) { |
- parameters.internal_color_format = GL_RGBA; |
- parameters.creation_internal_color_format = GL_RGBA; |
- parameters.color_format = GL_RGBA; |
+ parameters.allocate_alpha_channel = true; |
} else if (ContextProvider() |
->GetCapabilities() |
.emulate_rgb_buffer_with_rgba) { |
- parameters.internal_color_format = GL_RGBA; |
- parameters.creation_internal_color_format = GL_RGBA; |
- parameters.color_format = GL_RGBA; |
+ parameters.allocate_alpha_channel = true; |
} else { |
- GLenum format = |
- DefaultBufferRequiresAlphaChannelToBePreserved() ? GL_RGBA : GL_RGB; |
- parameters.creation_internal_color_format = format; |
- parameters.internal_color_format = format; |
- parameters.color_format = format; |
+ parameters.allocate_alpha_channel = |
+ DefaultBufferRequiresAlphaChannelToBePreserved(); |
} |
return parameters; |
} |
@@ -1156,17 +1141,24 @@ RefPtr<DrawingBuffer::ColorBuffer> DrawingBuffer::CreateColorBuffer( |
Platform::Current()->GetGpuMemoryBufferManager(); |
if (ShouldUseChromiumImage() && gpu_memory_buffer_manager) { |
parameters = GpuMemoryBufferColorBufferParameters(); |
- gfx::BufferFormat buffer_format = gpu::DefaultBufferFormatForImageFormat( |
- parameters.creation_internal_color_format); |
+ gfx::BufferFormat buffer_format; |
+ GLenum gl_format = GL_NONE; |
+ if (parameters.allocate_alpha_channel) { |
+ buffer_format = gfx::BufferFormat::RGBA_8888; |
+ gl_format = GL_RGBA; |
+ } else { |
+ buffer_format = gfx::BufferFormat::BGRX_8888; |
+ gl_format = GL_RGB; |
+ } |
gpu_memory_buffer = gpu_memory_buffer_manager->CreateGpuMemoryBuffer( |
gfx::Size(size), buffer_format, gfx::BufferUsage::SCANOUT, |
gpu::kNullSurfaceHandle); |
if (gpu_memory_buffer) { |
if (RuntimeEnabledFeatures::colorCorrectRenderingEnabled()) |
gpu_memory_buffer->SetColorSpaceForScanout(color_space_); |
- image_id = gl_->CreateImageCHROMIUM( |
- gpu_memory_buffer->AsClientBuffer(), size.Width(), size.Height(), |
- parameters.creation_internal_color_format); |
+ image_id = |
+ gl_->CreateImageCHROMIUM(gpu_memory_buffer->AsClientBuffer(), |
+ size.Width(), size.Height(), gl_format); |
if (!image_id) |
gpu_memory_buffer.reset(); |
} |
@@ -1191,21 +1183,14 @@ RefPtr<DrawingBuffer::ColorBuffer> DrawingBuffer::CreateColorBuffer( |
gl_->BindTexImage2DCHROMIUM(parameters.target, image_id); |
} else { |
if (storage_texture_supported_) { |
- GLenum internal_storage_format = GL_NONE; |
- if (parameters.creation_internal_color_format == GL_RGB) { |
- internal_storage_format = GL_RGB8; |
- } else if (parameters.creation_internal_color_format == GL_RGBA) { |
- internal_storage_format = GL_RGBA8; |
- } else { |
- NOTREACHED(); |
- } |
+ GLenum internal_storage_format = |
+ parameters.allocate_alpha_channel ? GL_RGBA8 : GL_RGB8; |
gl_->TexStorage2DEXT(GL_TEXTURE_2D, 1, internal_storage_format, |
size.Width(), size.Height()); |
} else { |
- gl_->TexImage2D(parameters.target, 0, |
- parameters.creation_internal_color_format, size.Width(), |
- size.Height(), 0, parameters.color_format, |
- GL_UNSIGNED_BYTE, 0); |
+ GLenum gl_format = parameters.allocate_alpha_channel ? GL_RGBA : GL_RGB; |
+ gl_->TexImage2D(parameters.target, 0, gl_format, size.Width(), |
+ size.Height(), 0, gl_format, GL_UNSIGNED_BYTE, 0); |
} |
} |