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

Side by Side Diff: cc/layers/io_surface_layer_impl.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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/layers/io_surface_layer_impl.h" 5 #include "cc/layers/io_surface_layer_impl.h"
6 6
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "cc/layers/quad_sink.h" 8 #include "cc/layers/quad_sink.h"
9 #include "cc/output/gl_renderer.h" // For the GLC() macro. 9 #include "cc/output/gl_renderer.h" // For the GLC() macro.
10 #include "cc/output/output_surface.h" 10 #include "cc/output/output_surface.h"
(...skipping 21 matching lines...) Expand all
32 32
33 void IOSurfaceLayerImpl::DestroyTexture() { 33 void IOSurfaceLayerImpl::DestroyTexture() {
34 if (io_surface_resource_id_) { 34 if (io_surface_resource_id_) {
35 ResourceProvider* resource_provider = 35 ResourceProvider* resource_provider =
36 layer_tree_impl()->resource_provider(); 36 layer_tree_impl()->resource_provider();
37 resource_provider->DeleteResource(io_surface_resource_id_); 37 resource_provider->DeleteResource(io_surface_resource_id_);
38 io_surface_resource_id_ = 0; 38 io_surface_resource_id_ = 0;
39 } 39 }
40 40
41 if (io_surface_texture_id_) { 41 if (io_surface_texture_id_) {
42 OutputSurface* output_surface = layer_tree_impl()->output_surface(); 42 ContextProvider* context_provider =
43 layer_tree_impl()->output_surface()->context_provider().get();
43 // TODO(skaslev): Implement this path for software compositing. 44 // TODO(skaslev): Implement this path for software compositing.
44 WebKit::WebGraphicsContext3D* context3d = output_surface->context3d(); 45 if (context_provider)
45 if (context3d) 46 context_provider->Context3d()->deleteTexture(io_surface_texture_id_);
46 context3d->deleteTexture(io_surface_texture_id_);
47 io_surface_texture_id_ = 0; 47 io_surface_texture_id_ = 0;
48 } 48 }
49 } 49 }
50 50
51 scoped_ptr<LayerImpl> IOSurfaceLayerImpl::CreateLayerImpl( 51 scoped_ptr<LayerImpl> IOSurfaceLayerImpl::CreateLayerImpl(
52 LayerTreeImpl* tree_impl) { 52 LayerTreeImpl* tree_impl) {
53 return IOSurfaceLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>(); 53 return IOSurfaceLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>();
54 } 54 }
55 55
56 void IOSurfaceLayerImpl::PushPropertiesTo(LayerImpl* layer) { 56 void IOSurfaceLayerImpl::PushPropertiesTo(LayerImpl* layer) {
57 LayerImpl::PushPropertiesTo(layer); 57 LayerImpl::PushPropertiesTo(layer);
58 58
59 IOSurfaceLayerImpl* io_surface_layer = 59 IOSurfaceLayerImpl* io_surface_layer =
60 static_cast<IOSurfaceLayerImpl*>(layer); 60 static_cast<IOSurfaceLayerImpl*>(layer);
61 io_surface_layer->SetIOSurfaceProperties(io_surface_id_, io_surface_size_); 61 io_surface_layer->SetIOSurfaceProperties(io_surface_id_, io_surface_size_);
62 } 62 }
63 63
64 bool IOSurfaceLayerImpl::WillDraw(DrawMode draw_mode, 64 bool IOSurfaceLayerImpl::WillDraw(DrawMode draw_mode,
65 ResourceProvider* resource_provider) { 65 ResourceProvider* resource_provider) {
66 if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) 66 if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE)
67 return false; 67 return false;
68 68
69 if (io_surface_changed_) { 69 if (io_surface_changed_) {
70 WebKit::WebGraphicsContext3D* context3d = 70 ContextProvider* context_provider =
71 resource_provider->GraphicsContext3D(); 71 layer_tree_impl()->output_surface()->context_provider().get();
72 if (!context3d) { 72 if (!context_provider) {
73 // TODO(skaslev): Implement this path for software compositing. 73 // TODO(skaslev): Implement this path for software compositing.
74 return false; 74 return false;
75 } 75 }
76 76
77 WebKit::WebGraphicsContext3D* context3d = context_provider->Context3d();
78
77 // TODO(ernstm): Do this in a way that we can track memory usage. 79 // TODO(ernstm): Do this in a way that we can track memory usage.
78 if (!io_surface_texture_id_) { 80 if (!io_surface_texture_id_) {
79 io_surface_texture_id_ = context3d->createTexture(); 81 io_surface_texture_id_ = context3d->createTexture();
80 io_surface_resource_id_ = 82 io_surface_resource_id_ =
81 resource_provider->CreateResourceFromExternalTexture( 83 resource_provider->CreateResourceFromExternalTexture(
82 GL_TEXTURE_RECTANGLE_ARB, 84 GL_TEXTURE_RECTANGLE_ARB,
83 io_surface_texture_id_); 85 io_surface_texture_id_);
84 } 86 }
85 87
86 GLC(context3d, 88 GLC(context3d,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 138
137 io_surface_id_ = io_surface_id; 139 io_surface_id_ = io_surface_id;
138 io_surface_size_ = size; 140 io_surface_size_ = size;
139 } 141 }
140 142
141 const char* IOSurfaceLayerImpl::LayerTypeAsString() const { 143 const char* IOSurfaceLayerImpl::LayerTypeAsString() const {
142 return "cc::IOSurfaceLayerImpl"; 144 return "cc::IOSurfaceLayerImpl";
143 } 145 }
144 146
145 } // namespace cc 147 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/delegated_renderer_layer_impl_unittest.cc ('k') | cc/layers/nine_patch_layer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698