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

Unified Diff: cc/resources/resource_provider.cc

Issue 20185002: ContextProvider in OutputSurface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: contextprovider: don't access Context3d() in OutputSurface contructors, it's not bound yet Created 7 years, 4 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
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/resource_provider.cc
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index 11eaab07a287c4d3282aa24e8a17c9dda2da8ef9..0db1b4cc52d8636bfdf2295da1a696aaf555dc81 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -158,7 +158,7 @@ scoped_ptr<ResourceProvider> ResourceProvider::Create(
new ResourceProvider(output_surface, highp_threshold_min));
bool success = false;
- if (output_surface->context3d()) {
+ if (resource_provider->Context3d()) {
success = resource_provider->InitializeGL();
} else {
resource_provider->InitializeSoftware();
@@ -179,11 +179,6 @@ ResourceProvider::~ResourceProvider() {
CleanUpGLIfNeeded();
}
-WebGraphicsContext3D* ResourceProvider::GraphicsContext3D() {
- DCHECK(thread_checker_.CalledOnValidThread());
- return output_surface_->context3d();
-}
-
bool ResourceProvider::InUseByConsumer(ResourceId id) {
DCHECK(thread_checker_.CalledOnValidThread());
ResourceMap::iterator it = resources_.find(id);
@@ -259,7 +254,7 @@ ResourceProvider::CreateResourceFromExternalTexture(
unsigned texture_id) {
DCHECK(thread_checker_.CalledOnValidThread());
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
GLC(context3d, context3d->bindTexture(texture_target, texture_id));
GLC(context3d, context3d->texParameteri(
@@ -329,30 +324,30 @@ void ResourceProvider::DeleteResourceInternal(ResourceMap::iterator it,
lost_resource = true;
if (resource->image_id) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
GLC(context3d, context3d->destroyImageCHROMIUM(resource->image_id));
}
if (resource->gl_id && !resource->external) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
GLC(context3d, context3d->deleteTexture(resource->gl_id));
}
if (resource->gl_upload_query_id) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
GLC(context3d, context3d->deleteQueryEXT(resource->gl_upload_query_id));
}
if (resource->gl_pixel_buffer_id) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
GLC(context3d, context3d->deleteBuffer(resource->gl_pixel_buffer_id));
}
if (resource->mailbox.IsValid() && resource->external) {
unsigned sync_point = resource->mailbox.sync_point();
if (resource->mailbox.IsTexture()) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
if (resource->gl_id)
GLC(context3d, context3d->deleteTexture(resource->gl_id));
@@ -402,7 +397,7 @@ void ResourceProvider::SetPixels(ResourceId id,
if (resource->gl_id) {
DCHECK(!resource->pending_set_pixels);
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
DCHECK(texture_uploader_.get());
context3d->bindTexture(GL_TEXTURE_2D, resource->gl_id);
@@ -472,21 +467,21 @@ void ResourceProvider::ReleaseCachedData() {
void ResourceProvider::Flush() {
DCHECK(thread_checker_.CalledOnValidThread());
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
if (context3d)
context3d->flush();
}
void ResourceProvider::Finish() {
DCHECK(thread_checker_.CalledOnValidThread());
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
if (context3d)
context3d->finish();
}
bool ResourceProvider::ShallowFlushIfSupported() {
DCHECK(thread_checker_.CalledOnValidThread());
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
if (!context3d || !use_shallow_flush_)
return false;
@@ -511,7 +506,7 @@ const ResourceProvider::Resource* ResourceProvider::LockForRead(ResourceId id) {
if (resource->external) {
if (!resource->gl_id && resource->mailbox.IsTexture()) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
if (resource->mailbox.sync_point()) {
GLC(context3d,
@@ -685,7 +680,9 @@ 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) {
+ DCHECK(output_surface_->HasClient());
+}
void ResourceProvider::InitializeSoftware() {
DCHECK(thread_checker_.CalledOnValidThread());
@@ -703,7 +700,7 @@ bool ResourceProvider::InitializeGL() {
DCHECK(!texture_uploader_);
DCHECK_NE(GLTexture, default_resource_type_);
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
if (!context3d->makeContextCurrent())
@@ -740,7 +737,7 @@ bool ResourceProvider::InitializeGL() {
}
void ResourceProvider::CleanUpGLIfNeeded() {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
if (default_resource_type_ != GLTexture) {
// We are not in GL mode, but double check before returning.
DCHECK(!context3d);
@@ -785,7 +782,7 @@ const ResourceProvider::ResourceIdMap& ResourceProvider::GetChildToParentMap(
void ResourceProvider::PrepareSendToParent(const ResourceIdArray& resources,
TransferableResourceArray* list) {
DCHECK(thread_checker_.CalledOnValidThread());
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
if (!context3d || !context3d->makeContextCurrent()) {
// TODO(skaslev): Implement this path for software compositing.
return;
@@ -817,7 +814,7 @@ void ResourceProvider::PrepareSendToChild(int child,
const ResourceIdArray& resources,
TransferableResourceArray* list) {
DCHECK(thread_checker_.CalledOnValidThread());
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
if (!context3d || !context3d->makeContextCurrent()) {
// TODO(skaslev): Implement this path for software compositing.
return;
@@ -854,7 +851,7 @@ void ResourceProvider::PrepareSendToChild(int child,
void ResourceProvider::ReceiveFromChild(
int child, const TransferableResourceArray& resources) {
DCHECK(thread_checker_.CalledOnValidThread());
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
if (!context3d || !context3d->makeContextCurrent()) {
// TODO(skaslev): Implement this path for software compositing.
return;
@@ -891,7 +888,7 @@ void ResourceProvider::ReceiveFromChild(
void ResourceProvider::ReceiveFromParent(
const TransferableResourceArray& resources) {
DCHECK(thread_checker_.CalledOnValidThread());
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
if (!context3d || !context3d->makeContextCurrent()) {
// TODO(skaslev): Implement this path for software compositing.
return;
@@ -970,7 +967,7 @@ void ResourceProvider::AcquirePixelBuffer(ResourceId id) {
DCHECK(!resource->image_id);
if (resource->type == GLTexture) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
if (!resource->gl_pixel_buffer_id)
resource->gl_pixel_buffer_id = context3d->createBuffer();
@@ -1017,7 +1014,7 @@ void ResourceProvider::ReleasePixelBuffer(ResourceId id) {
if (resource->type == GLTexture) {
if (!resource->gl_pixel_buffer_id)
return;
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
context3d->bindBuffer(
GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
@@ -1048,7 +1045,7 @@ uint8_t* ResourceProvider::MapPixelBuffer(ResourceId id) {
DCHECK(!resource->image_id);
if (resource->type == GLTexture) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
DCHECK(resource->gl_pixel_buffer_id);
context3d->bindBuffer(
@@ -1079,7 +1076,7 @@ void ResourceProvider::UnmapPixelBuffer(ResourceId id) {
DCHECK(!resource->image_id);
if (resource->type == GLTexture) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
DCHECK(resource->gl_pixel_buffer_id);
context3d->bindBuffer(
@@ -1095,7 +1092,7 @@ void ResourceProvider::BindForSampling(ResourceProvider::ResourceId resource_id,
GLenum unit,
GLenum filter) {
DCHECK(thread_checker_.CalledOnValidThread());
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
ResourceMap::iterator it = resources_.find(resource_id);
DCHECK(it != resources_.end());
Resource* resource = &it->second;
@@ -1134,7 +1131,7 @@ void ResourceProvider::UnbindForSampling(
if (!resource->image_id)
return;
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK_EQ(GL_TEXTURE0, GetActiveTextureUnit(context3d));
if (unit != GL_TEXTURE0)
GLC(context3d, context3d->activeTexture(unit));
@@ -1161,7 +1158,7 @@ void ResourceProvider::BeginSetPixels(ResourceId id) {
LockForWrite(id);
if (resource->gl_id) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
DCHECK(resource->gl_pixel_buffer_id);
context3d->bindTexture(GL_TEXTURE_2D, resource->gl_id);
@@ -1222,7 +1219,7 @@ void ResourceProvider::ForceSetPixelsToComplete(ResourceId id) {
DCHECK(!resource->set_pixels_completion_forced);
if (resource->gl_id) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
GLC(context3d, context3d->bindTexture(GL_TEXTURE_2D, resource->gl_id));
GLC(context3d, context3d->waitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D));
GLC(context3d, context3d->bindTexture(GL_TEXTURE_2D, 0));
@@ -1240,7 +1237,7 @@ bool ResourceProvider::DidSetPixelsComplete(ResourceId id) {
DCHECK(resource->pending_set_pixels);
if (resource->gl_id) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
DCHECK(resource->gl_upload_query_id);
unsigned complete = 1;
@@ -1273,7 +1270,7 @@ void ResourceProvider::LazyCreate(Resource* resource) {
if (resource->texture_pool == 0)
return;
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
// Create and set texture properties. Allocation is delayed until needed.
resource->gl_id = CreateTextureId(context3d);
@@ -1302,7 +1299,7 @@ void ResourceProvider::LazyAllocate(Resource* resource) {
if (resource->allocated || !resource->gl_id)
return;
resource->allocated = true;
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
gfx::Size& size = resource->size;
GLenum format = resource->format;
GLC(context3d, context3d->bindTexture(GL_TEXTURE_2D, resource->gl_id));
@@ -1351,7 +1348,7 @@ void ResourceProvider::AcquireImage(ResourceId id) {
return;
resource->allocated = true;
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
resource->image_id = context3d->createImageCHROMIUM(
resource->size.width(), resource->size.height(), GL_RGBA8_OES);
@@ -1370,7 +1367,7 @@ void ResourceProvider::ReleaseImage(ResourceId id) {
if (!resource->image_id)
return;
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
context3d->destroyImageCHROMIUM(resource->image_id);
resource->image_id = 0;
@@ -1388,7 +1385,7 @@ uint8_t* ResourceProvider::MapImage(ResourceId id) {
DCHECK(!resource->exported);
if (resource->image_id) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
return static_cast<uint8_t*>(
context3d->mapImageCHROMIUM(resource->image_id, GL_READ_WRITE));
@@ -1410,7 +1407,7 @@ void ResourceProvider::UnmapImage(ResourceId id) {
DCHECK(!resource->exported);
if (resource->image_id) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
context3d->unmapImageCHROMIUM(resource->image_id);
}
@@ -1428,7 +1425,7 @@ int ResourceProvider::GetImageStride(ResourceId id) {
int stride = 0;
if (resource->image_id) {
- WebGraphicsContext3D* context3d = output_surface_->context3d();
+ WebGraphicsContext3D* context3d = Context3d();
DCHECK(context3d);
context3d->getImageParameterivCHROMIUM(
resource->image_id, GL_IMAGE_ROWBYTES_CHROMIUM, &stride);
@@ -1443,4 +1440,9 @@ GLint ResourceProvider::GetActiveTextureUnit(WebGraphicsContext3D* context) {
return active_unit;
}
+WebKit::WebGraphicsContext3D* ResourceProvider::Context3d() const {
+ ContextProvider* context_provider = output_surface_->context_provider();
+ return context_provider ? context_provider->Context3d() : NULL;
+}
+
} // namespace cc
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698