diff options
author | hbono@chromium.org <hbono@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-23 03:56:46 +0000 |
---|---|---|
committer | hbono@chromium.org <hbono@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-23 03:56:46 +0000 |
commit | c70258cee199dcb248805eb0b1cb109504a3c8fc (patch) | |
tree | bdea3609f1c64e7ffa8fa8add3098f13b1410ae7 | |
parent | fe476ea9429dc2e2544fdccc3113c0ba4389c840 (diff) | |
download | chromium_src-c70258cee199dcb248805eb0b1cb109504a3c8fc.zip chromium_src-c70258cee199dcb248805eb0b1cb109504a3c8fc.tar.gz chromium_src-c70258cee199dcb248805eb0b1cb109504a3c8fc.tar.bz2 |
Revert 163477 - Fix glTexSubImage2D for non-32bpp formats.
The non-mapped upload path for glTexSubImage2D is assuming 32bpp
blindly, for all formats.
TEST=local build, run on ARM (forcing non-mapped path)
BUG=None
Change-Id: Ib8ac46646b27faeeb8c19ebb519d321e25c1a8cb
Review URL: https://chromiumcodereview.appspot.com/11229040
TBR=sheu@chromium.org
Review URL: https://codereview.chromium.org/11228044
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163485 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | cc/texture.cc | 23 | ||||
-rw-r--r-- | cc/texture.h | 1 | ||||
-rw-r--r-- | cc/texture_uploader.cc | 34 |
3 files changed, 25 insertions, 33 deletions
diff --git a/cc/texture.cc b/cc/texture.cc index f6400eb..9fd8ebe 100644 --- a/cc/texture.cc +++ b/cc/texture.cc @@ -5,7 +5,6 @@ #include "config.h" #include "cc/texture.h" -#include "third_party/khronos/GLES2/gl2ext.h" namespace cc { @@ -23,27 +22,11 @@ size_t Texture::bytes() const return memorySizeBytes(m_size, m_format); } -size_t Texture::bytesPerPixel(GLenum format) -{ - unsigned int componentsPerPixel = 0; - unsigned int bytesPerComponent = 1; - switch (format) { - case GL_RGBA: - case GL_BGRA_EXT: - componentsPerPixel = 4; - break; - case GL_LUMINANCE: - componentsPerPixel = 1; - break; - default: - NOTREACHED(); - } - return componentsPerPixel * bytesPerComponent; -} - size_t Texture::memorySizeBytes(const IntSize& size, GLenum format) { - return bytesPerPixel(format) * size.width() * size.height(); + unsigned int componentsPerPixel = 4; + unsigned int bytesPerComponent = 1; + return componentsPerPixel * bytesPerComponent * size.width() * size.height(); } } diff --git a/cc/texture.h b/cc/texture.h index af5d40b..aecec16 100644 --- a/cc/texture.h +++ b/cc/texture.h @@ -28,7 +28,6 @@ public: size_t bytes() const; - static size_t bytesPerPixel(GLenum format); static size_t memorySizeBytes(const IntSize&, GLenum format); private: diff --git a/cc/texture_uploader.cc b/cc/texture_uploader.cc index eadcd11..64b3de52 100644 --- a/cc/texture_uploader.cc +++ b/cc/texture_uploader.cc @@ -12,7 +12,6 @@ #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" @@ -213,12 +212,10 @@ 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[bytes_per_pixel * offset.y() * image_rect.width()]; + pixel_source = &image[4 * offset.y() * image_rect.width()]; } else { - size_t needed_size = source_rect.width() * source_rect.height() * bytes_per_pixel; + size_t needed_size = source_rect.width() * source_rect.height() * 4; if (m_subImageSize < needed_size) { m_subImage.reset(new uint8_t[needed_size]); m_subImageSize = needed_size; @@ -226,10 +223,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() * bytes_per_pixel * row], - &image[bytes_per_pixel * (offset.x() + - (offset.y() + row) * image_rect.width())], - source_rect.width() * bytes_per_pixel); + memcpy(&m_subImage[source_rect.width() * 4 * row], + &image[4 * (offset.x() + + (offset.y() + row) * image_rect.width())], + source_rect.width() * 4); pixel_source = &m_subImage[0]; } @@ -298,7 +295,20 @@ void TextureUploader::uploadWithMapTexSubImage(const uint8_t* image, return; } - unsigned int bytes_per_pixel = Texture::bytesPerPixel(format); + 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; if (image_rect.width() == source_rect.width() && !offset.x()) { memcpy(pixel_dest, @@ -309,8 +319,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[bytes_per_pixel * (offset.x() + - (offset.y() + row) * image_rect.width())], + &image[4 * (offset.x() + + (offset.y() + row) * image_rect.width())], source_rect.width() * bytes_per_pixel); } |