| Index: cc/texture_uploader.cc
|
| diff --git a/cc/texture_uploader.cc b/cc/texture_uploader.cc
|
| index 64b3de52424a4ed223a204145ef769843bfe7c79..eadcd11bdc5fa4a040de402a0a74ad01731fc45c 100644
|
| --- a/cc/texture_uploader.cc
|
| +++ b/cc/texture_uploader.cc
|
| @@ -12,6 +12,7 @@
|
| #include "base/debug/alias.h"
|
| #include "base/debug/trace_event.h"
|
| #include "base/metrics/histogram.h"
|
| +#include "cc/texture.h"
|
| #include "cc/prioritized_texture.h"
|
| #include "third_party/khronos/GLES2/gl2.h"
|
| #include "third_party/khronos/GLES2/gl2ext.h"
|
| @@ -212,10 +213,12 @@ void TextureUploader::uploadWithTexSubImage(const uint8_t* image,
|
| source_rect.y() - image_rect.y());
|
|
|
| const uint8_t* pixel_source;
|
| + unsigned int bytes_per_pixel = Texture::bytesPerPixel(format);
|
| +
|
| if (image_rect.width() == source_rect.width() && !offset.x()) {
|
| - pixel_source = &image[4 * offset.y() * image_rect.width()];
|
| + pixel_source = &image[bytes_per_pixel * offset.y() * image_rect.width()];
|
| } else {
|
| - size_t needed_size = source_rect.width() * source_rect.height() * 4;
|
| + size_t needed_size = source_rect.width() * source_rect.height() * bytes_per_pixel;
|
| if (m_subImageSize < needed_size) {
|
| m_subImage.reset(new uint8_t[needed_size]);
|
| m_subImageSize = needed_size;
|
| @@ -223,10 +226,10 @@ void TextureUploader::uploadWithTexSubImage(const uint8_t* image,
|
| // Strides not equal, so do a row-by-row memcpy from the
|
| // paint results into a temp buffer for uploading.
|
| for (int row = 0; row < source_rect.height(); ++row)
|
| - memcpy(&m_subImage[source_rect.width() * 4 * row],
|
| - &image[4 * (offset.x() +
|
| - (offset.y() + row) * image_rect.width())],
|
| - source_rect.width() * 4);
|
| + memcpy(&m_subImage[source_rect.width() * bytes_per_pixel * row],
|
| + &image[bytes_per_pixel * (offset.x() +
|
| + (offset.y() + row) * image_rect.width())],
|
| + source_rect.width() * bytes_per_pixel);
|
|
|
| pixel_source = &m_subImage[0];
|
| }
|
| @@ -295,20 +298,7 @@ void TextureUploader::uploadWithMapTexSubImage(const uint8_t* image,
|
| return;
|
| }
|
|
|
| - unsigned int components_per_pixel = 0;
|
| - switch (format) {
|
| - case GL_RGBA:
|
| - case GL_BGRA_EXT:
|
| - components_per_pixel = 4;
|
| - break;
|
| - case GL_LUMINANCE:
|
| - components_per_pixel = 1;
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| - unsigned int bytes_per_component = 1;
|
| - unsigned int bytes_per_pixel = components_per_pixel * bytes_per_component;
|
| + unsigned int bytes_per_pixel = Texture::bytesPerPixel(format);
|
|
|
| if (image_rect.width() == source_rect.width() && !offset.x()) {
|
| memcpy(pixel_dest,
|
| @@ -319,8 +309,8 @@ void TextureUploader::uploadWithMapTexSubImage(const uint8_t* image,
|
| // paint results into the pixelDest
|
| for (int row = 0; row < source_rect.height(); ++row)
|
| memcpy(&pixel_dest[source_rect.width() * row * bytes_per_pixel],
|
| - &image[4 * (offset.x() +
|
| - (offset.y() + row) * image_rect.width())],
|
| + &image[bytes_per_pixel * (offset.x() +
|
| + (offset.y() + row) * image_rect.width())],
|
| source_rect.width() * bytes_per_pixel);
|
| }
|
|
|
|
|