Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3267)

Unified Diff: cc/resources/resource_provider.cc

Issue 21159007: cc: Adding support for RGBA_4444 tile textures (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code review comments Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/resources/resource_provider.cc
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index 9779a546958441a5af186e05e316b4dcc795e1bd..fe0547277770fdbd1d82c50e6aa58e96373092e1 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -161,9 +161,12 @@ ResourceProvider::Child::~Child() {}
scoped_ptr<ResourceProvider> ResourceProvider::Create(
OutputSurface* output_surface,
- int highp_threshold_min) {
+ int highp_threshold_min,
+ bool use_rgba_4444_textures) {
scoped_ptr<ResourceProvider> resource_provider(
- new ResourceProvider(output_surface, highp_threshold_min));
+ new ResourceProvider(output_surface,
+ highp_threshold_min,
+ use_rgba_4444_textures));
bool success = false;
if (resource_provider->Context3d()) {
@@ -670,7 +673,8 @@ ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() {
}
ResourceProvider::ResourceProvider(OutputSurface* output_surface,
- int highp_threshold_min)
+ int highp_threshold_min,
+ bool use_rgba_4444_textures)
: output_surface_(output_surface),
lost_output_surface_(false),
highp_threshold_min_(highp_threshold_min),
@@ -681,7 +685,8 @@ ResourceProvider::ResourceProvider(OutputSurface* output_surface,
use_texture_usage_hint_(false),
use_shallow_flush_(false),
max_texture_size_(0),
- best_texture_format_(0) {
+ best_texture_format_(0),
+ best_texture_type_(use_rgba_4444_textures ? RGBA_4444 : RGBA_8888) {
DCHECK(output_surface_->HasClient());
}
@@ -719,7 +724,10 @@ bool ResourceProvider::InitializeGL() {
use_texture_usage_hint_ = caps.texture_usage;
texture_uploader_ =
- TextureUploader::Create(context3d, use_map_sub, use_shallow_flush_);
+ TextureUploader::Create(context3d,
+ use_map_sub,
+ use_shallow_flush_,
+ best_texture_type_ == RGBA_4444);
GLC(context3d, context3d->getIntegerv(GL_MAX_TEXTURE_SIZE,
&max_texture_size_));
best_texture_format_ = PlatformColor::BestTextureFormat(use_bgra);
@@ -975,9 +983,10 @@ void ResourceProvider::AcquirePixelBuffer(ResourceId id) {
context3d->bindBuffer(
GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
resource->gl_pixel_buffer_id);
+ size_t bytes_per_pixel = (best_texture_type_ == RGBA_4444) ? 2 : 4;
context3d->bufferData(
GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
- 4 * resource->size.GetArea(),
+ bytes_per_pixel * resource->size.GetArea(),
NULL,
GL_DYNAMIC_DRAW);
context3d->bindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0);
@@ -1159,6 +1168,19 @@ void ResourceProvider::BeginSetPixels(ResourceId id) {
context3d->beginQueryEXT(
GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM,
resource->gl_upload_query_id);
+ GLenum texture_data_type = GL_UNSIGNED_BYTE;
+ switch (best_texture_type_) {
+ case RGBA_4444:
+ texture_data_type = GL_UNSIGNED_SHORT_4_4_4_4;
+ break;
+ case RGBA_8888:
+ texture_data_type = GL_UNSIGNED_BYTE;
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+
if (allocate) {
context3d->asyncTexImage2DCHROMIUM(GL_TEXTURE_2D,
0, /* level */
@@ -1167,7 +1189,7 @@ void ResourceProvider::BeginSetPixels(ResourceId id) {
resource->size.height(),
0, /* border */
resource->format,
- GL_UNSIGNED_BYTE,
+ texture_data_type,
NULL);
} else {
context3d->asyncTexSubImage2DCHROMIUM(GL_TEXTURE_2D,
@@ -1177,7 +1199,7 @@ void ResourceProvider::BeginSetPixels(ResourceId id) {
resource->size.width(),
resource->size.height(),
resource->format,
- GL_UNSIGNED_BYTE,
+ texture_data_type,
NULL);
}
context3d->endQueryEXT(GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM);
@@ -1288,6 +1310,18 @@ void ResourceProvider::LazyAllocate(Resource* resource) {
size.width(),
size.height()));
} else {
+ GLenum texture_data_type = GL_UNSIGNED_BYTE;
+ switch (best_texture_type_) {
+ case RGBA_4444:
+ texture_data_type = GL_UNSIGNED_SHORT_4_4_4_4;
+ break;
+ case RGBA_8888:
+ texture_data_type = GL_UNSIGNED_BYTE;
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
GLC(context3d, context3d->texImage2D(GL_TEXTURE_2D,
0,
format,
@@ -1295,7 +1329,7 @@ void ResourceProvider::LazyAllocate(Resource* resource) {
size.height(),
0,
format,
- GL_UNSIGNED_BYTE,
+ texture_data_type,
NULL));
}
}

Powered by Google App Engine
This is Rietveld 408576698