OLD | NEW |
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/output/delegating_renderer.h" | 5 #include "cc/output/delegating_renderer.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "cc/resources/resource_provider.h" | 24 #include "cc/resources/resource_provider.h" |
25 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" | 25 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" |
26 #include "third_party/khronos/GLES2/gl2ext.h" | 26 #include "third_party/khronos/GLES2/gl2ext.h" |
27 | 27 |
28 using WebKit::WebGraphicsContext3D; | 28 using WebKit::WebGraphicsContext3D; |
29 | 29 |
30 namespace cc { | 30 namespace cc { |
31 | 31 |
32 scoped_ptr<DelegatingRenderer> DelegatingRenderer::Create( | 32 scoped_ptr<DelegatingRenderer> DelegatingRenderer::Create( |
33 RendererClient* client, | 33 RendererClient* client, |
| 34 const LayerTreeSettings* settings, |
34 OutputSurface* output_surface, | 35 OutputSurface* output_surface, |
35 ResourceProvider* resource_provider) { | 36 ResourceProvider* resource_provider) { |
36 scoped_ptr<DelegatingRenderer> renderer( | 37 scoped_ptr<DelegatingRenderer> renderer(new DelegatingRenderer( |
37 new DelegatingRenderer(client, output_surface, resource_provider)); | 38 client, settings, output_surface, resource_provider)); |
38 if (!renderer->Initialize()) | 39 if (!renderer->Initialize()) |
39 return scoped_ptr<DelegatingRenderer>(); | 40 return scoped_ptr<DelegatingRenderer>(); |
40 return renderer.Pass(); | 41 return renderer.Pass(); |
41 } | 42 } |
42 | 43 |
43 DelegatingRenderer::DelegatingRenderer( | 44 DelegatingRenderer::DelegatingRenderer(RendererClient* client, |
44 RendererClient* client, | 45 const LayerTreeSettings* settings, |
45 OutputSurface* output_surface, | 46 OutputSurface* output_surface, |
46 ResourceProvider* resource_provider) | 47 ResourceProvider* resource_provider) |
47 : Renderer(client), | 48 : Renderer(client, settings), |
48 output_surface_(output_surface), | 49 output_surface_(output_surface), |
49 resource_provider_(resource_provider), | 50 resource_provider_(resource_provider), |
50 visible_(true) { | 51 visible_(true) { |
51 DCHECK(resource_provider_); | 52 DCHECK(resource_provider_); |
52 } | 53 } |
53 | 54 |
54 bool DelegatingRenderer::Initialize() { | 55 bool DelegatingRenderer::Initialize() { |
55 capabilities_.using_partial_swap = false; | 56 capabilities_.using_partial_swap = false; |
56 capabilities_.max_texture_size = resource_provider_->max_texture_size(); | 57 capabilities_.max_texture_size = resource_provider_->max_texture_size(); |
57 capabilities_.best_texture_format = resource_provider_->best_texture_format(); | 58 capabilities_.best_texture_format = resource_provider_->best_texture_format(); |
58 capabilities_.allow_partial_texture_updates = false; | 59 capabilities_.allow_partial_texture_updates = false; |
59 capabilities_.using_offscreen_context3d = false; | 60 capabilities_.using_offscreen_context3d = false; |
60 | 61 |
61 if (!output_surface_->context_provider()) { | 62 if (!output_surface_->context_provider()) { |
62 // TODO(danakj): Make software compositing work. | 63 // TODO(danakj): Make software compositing work. |
63 return true; | 64 return true; |
64 } | 65 } |
65 | 66 |
66 WebGraphicsContext3D* context3d = | 67 WebGraphicsContext3D* context3d = |
67 output_surface_->context_provider()->Context3d(); | 68 output_surface_->context_provider()->Context3d(); |
68 | 69 |
69 if (!context3d->makeContextCurrent()) | 70 if (!context3d->makeContextCurrent()) |
70 return false; | 71 return false; |
71 | 72 |
72 std::string unique_context_name = base::StringPrintf( | 73 std::string unique_context_name = base::StringPrintf( |
73 "%s-%p", | 74 "%s-%p", settings_->compositor_name.c_str(), context3d); |
74 Settings().compositor_name.c_str(), | |
75 context3d); | |
76 context3d->pushGroupMarkerEXT(unique_context_name.c_str()); | 75 context3d->pushGroupMarkerEXT(unique_context_name.c_str()); |
77 | 76 |
78 const ContextProvider::Capabilities& caps = | 77 const ContextProvider::Capabilities& caps = |
79 output_surface_->context_provider()->ContextCapabilities(); | 78 output_surface_->context_provider()->ContextCapabilities(); |
80 | 79 |
81 DCHECK(!caps.iosurface || caps.texture_rectangle); | 80 DCHECK(!caps.iosurface || caps.texture_rectangle); |
82 | 81 |
83 capabilities_.using_set_visibility = caps.set_visibility; | 82 capabilities_.using_set_visibility = caps.set_visibility; |
84 capabilities_.using_egl_image = caps.egl_image_external; | 83 capabilities_.using_egl_image = caps.egl_image_external; |
85 capabilities_.using_map_image = | 84 capabilities_.using_map_image = settings_->use_map_image && caps.map_image; |
86 Settings().use_map_image && caps.map_image; | |
87 | 85 |
88 return true; | 86 return true; |
89 } | 87 } |
90 | 88 |
91 DelegatingRenderer::~DelegatingRenderer() {} | 89 DelegatingRenderer::~DelegatingRenderer() {} |
92 | 90 |
93 const RendererCapabilities& DelegatingRenderer::Capabilities() const { | 91 const RendererCapabilities& DelegatingRenderer::Capabilities() const { |
94 return capabilities_; | 92 return capabilities_; |
95 } | 93 } |
96 | 94 |
97 bool DelegatingRenderer::CanReadPixels() const { return false; } | 95 bool DelegatingRenderer::CanReadPixels() const { return false; } |
98 | 96 |
99 static ResourceProvider::ResourceId AppendToArray( | 97 static ResourceProvider::ResourceId AppendToArray( |
100 ResourceProvider::ResourceIdArray* array, | 98 ResourceProvider::ResourceIdArray* array, |
101 ResourceProvider::ResourceId id) { | 99 ResourceProvider::ResourceId id) { |
102 array->push_back(id); | 100 array->push_back(id); |
103 return id; | 101 return id; |
104 } | 102 } |
105 | 103 |
106 void DelegatingRenderer::DrawFrame( | 104 void DelegatingRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order, |
107 RenderPassList* render_passes_in_draw_order, | 105 ContextProvider* offscreen_context_provider, |
108 ContextProvider* offscreen_context_provider) { | 106 float device_scale_factor, |
| 107 bool allow_partial_swap) { |
109 TRACE_EVENT0("cc", "DelegatingRenderer::DrawFrame"); | 108 TRACE_EVENT0("cc", "DelegatingRenderer::DrawFrame"); |
110 | 109 |
111 DCHECK(!frame_for_swap_buffers_.delegated_frame_data); | 110 DCHECK(!frame_for_swap_buffers_.delegated_frame_data); |
112 | 111 |
113 frame_for_swap_buffers_.metadata = client_->MakeCompositorFrameMetadata(); | 112 frame_for_swap_buffers_.metadata = client_->MakeCompositorFrameMetadata(); |
114 | 113 |
115 frame_for_swap_buffers_.delegated_frame_data = | 114 frame_for_swap_buffers_.delegated_frame_data = |
116 make_scoped_ptr(new DelegatedFrameData); | 115 make_scoped_ptr(new DelegatedFrameData); |
117 DelegatedFrameData& out_data = *frame_for_swap_buffers_.delegated_frame_data; | 116 DelegatedFrameData& out_data = *frame_for_swap_buffers_.delegated_frame_data; |
118 // Move the render passes and resources into the |out_frame|. | 117 // Move the render passes and resources into the |out_frame|. |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 stats.bytesAllocated = bytes_allocated; | 189 stats.bytesAllocated = bytes_allocated; |
191 stats.backbufferRequested = false; | 190 stats.backbufferRequested = false; |
192 context_provider->Context3d()->sendManagedMemoryStatsCHROMIUM(&stats); | 191 context_provider->Context3d()->sendManagedMemoryStatsCHROMIUM(&stats); |
193 } | 192 } |
194 | 193 |
195 void DelegatingRenderer::SetDiscardBackBufferWhenNotVisible(bool discard) { | 194 void DelegatingRenderer::SetDiscardBackBufferWhenNotVisible(bool discard) { |
196 // Nothing to do, we don't have a back buffer. | 195 // Nothing to do, we don't have a back buffer. |
197 } | 196 } |
198 | 197 |
199 } // namespace cc | 198 } // namespace cc |
OLD | NEW |