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/delegating_renderer.h" | 5 #include "cc/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 |
11 #include "base/debug/trace_event.h" | 11 #include "base/debug/trace_event.h" |
12 #include "base/string_split.h" | 12 #include "base/string_split.h" |
13 #include "base/string_util.h" | 13 #include "base/string_util.h" |
14 #include "cc/checkerboard_draw_quad.h" | 14 #include "cc/checkerboard_draw_quad.h" |
| 15 #include "cc/compositor_frame.h" |
15 #include "cc/compositor_frame_ack.h" | 16 #include "cc/compositor_frame_ack.h" |
16 #include "cc/debug_border_draw_quad.h" | 17 #include "cc/debug_border_draw_quad.h" |
17 #include "cc/render_pass.h" | 18 #include "cc/render_pass.h" |
18 #include "cc/render_pass_draw_quad.h" | 19 #include "cc/render_pass_draw_quad.h" |
19 #include "cc/resource_provider.h" | 20 #include "cc/resource_provider.h" |
20 #include "cc/solid_color_draw_quad.h" | 21 #include "cc/solid_color_draw_quad.h" |
21 #include "cc/texture_draw_quad.h" | 22 #include "cc/texture_draw_quad.h" |
22 #include "cc/tile_draw_quad.h" | 23 #include "cc/tile_draw_quad.h" |
23 #include "cc/yuv_video_draw_quad.h" | 24 #include "cc/yuv_video_draw_quad.h" |
24 #include "third_party/khronos/GLES2/gl2ext.h" | 25 #include "third_party/khronos/GLES2/gl2ext.h" |
25 | 26 |
26 using WebKit::WebGraphicsContext3D; | 27 using WebKit::WebGraphicsContext3D; |
27 | 28 |
28 namespace cc { | 29 namespace cc { |
29 | 30 |
30 scoped_ptr<DelegatingRenderer> DelegatingRenderer::Create( | 31 scoped_ptr<DelegatingRenderer> DelegatingRenderer::Create( |
31 RendererClient* client, ResourceProvider* resource_provider) { | 32 RendererClient* client, |
| 33 OutputSurface* output_surface, |
| 34 ResourceProvider* resource_provider) { |
32 scoped_ptr<DelegatingRenderer> renderer( | 35 scoped_ptr<DelegatingRenderer> renderer( |
33 new DelegatingRenderer(client, resource_provider)); | 36 new DelegatingRenderer(client, output_surface, resource_provider)); |
34 if (!renderer->Initialize()) | 37 if (!renderer->Initialize()) |
35 return scoped_ptr<DelegatingRenderer>(); | 38 return scoped_ptr<DelegatingRenderer>(); |
36 return renderer.Pass(); | 39 return renderer.Pass(); |
37 } | 40 } |
38 | 41 |
39 DelegatingRenderer::DelegatingRenderer( | 42 DelegatingRenderer::DelegatingRenderer( |
40 RendererClient* client, ResourceProvider* resource_provider) | 43 RendererClient* client, |
| 44 OutputSurface* output_surface, |
| 45 ResourceProvider* resource_provider) |
41 : Renderer(client), | 46 : Renderer(client), |
| 47 output_surface_(output_surface), |
42 resource_provider_(resource_provider), | 48 resource_provider_(resource_provider), |
43 visible_(true) { | 49 visible_(true) { |
44 DCHECK(resource_provider_); | 50 DCHECK(resource_provider_); |
45 } | 51 } |
46 | 52 |
47 bool DelegatingRenderer::Initialize() { | 53 bool DelegatingRenderer::Initialize() { |
48 capabilities_.usingPartialSwap = false; | 54 capabilities_.usingPartialSwap = false; |
49 // TODO(danakj): Throttling - we may want to only allow 1 outstanding frame, | 55 // TODO(danakj): Throttling - we may want to only allow 1 outstanding frame, |
50 // but the parent compositor may pipeline for us. | 56 // but the parent compositor may pipeline for us. |
51 // TODO(danakj): Can we use this in single-thread mode? | 57 // TODO(danakj): Can we use this in single-thread mode? |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 context3d->setContextLostCallback(NULL); | 127 context3d->setContextLostCallback(NULL); |
122 } | 128 } |
123 | 129 |
124 const RendererCapabilities& DelegatingRenderer::capabilities() const { | 130 const RendererCapabilities& DelegatingRenderer::capabilities() const { |
125 return capabilities_; | 131 return capabilities_; |
126 } | 132 } |
127 | 133 |
128 void DelegatingRenderer::drawFrame( | 134 void DelegatingRenderer::drawFrame( |
129 RenderPassList& render_passes_in_draw_order) { | 135 RenderPassList& render_passes_in_draw_order) { |
130 TRACE_EVENT0("cc", "DelegatingRenderer::drawFrame"); | 136 TRACE_EVENT0("cc", "DelegatingRenderer::drawFrame"); |
131 NOTIMPLEMENTED(); | 137 |
| 138 CompositorFrame out_frame; |
| 139 out_frame.metadata = m_client->makeCompositorFrameMetadata(); |
| 140 |
| 141 out_frame.delegated_frame_data = make_scoped_ptr(new DelegatedFrameData); |
| 142 DelegatedFrameData& out_data = *out_frame.delegated_frame_data; |
| 143 |
| 144 out_data.size = viewportSize(); |
| 145 out_data.render_pass_list.swap(render_passes_in_draw_order); |
| 146 |
| 147 ResourceProvider::ResourceIdArray resources; |
| 148 for (size_t i = 0; i < out_data.render_pass_list.size(); ++i) { |
| 149 for (size_t j = 0; j < out_data.render_pass_list[i]->quad_list.size(); ++j) |
| 150 out_data.render_pass_list[i]->quad_list[j]->AppendResources(&resources); |
| 151 } |
| 152 resource_provider_->prepareSendToParent(resources, &out_data.resource_list); |
| 153 |
| 154 output_surface_->SendFrameToParentCompositor(&out_frame); |
132 } | 155 } |
133 | 156 |
134 bool DelegatingRenderer::swapBuffers() { | 157 bool DelegatingRenderer::swapBuffers() { |
135 return true; | 158 return true; |
136 } | 159 } |
137 | 160 |
138 void DelegatingRenderer::getFramebufferPixels(void *pixels, | 161 void DelegatingRenderer::getFramebufferPixels(void *pixels, |
139 const gfx::Rect& rect) { | 162 const gfx::Rect& rect) { |
140 NOTIMPLEMENTED(); | 163 NOTIMPLEMENTED(); |
141 } | 164 } |
(...skipping 14 matching lines...) Expand all Loading... |
156 | 179 |
157 void DelegatingRenderer::setVisible(bool visible) { | 180 void DelegatingRenderer::setVisible(bool visible) { |
158 visible_ = visible; | 181 visible_ = visible; |
159 } | 182 } |
160 | 183 |
161 void DelegatingRenderer::onContextLost() { | 184 void DelegatingRenderer::onContextLost() { |
162 m_client->didLoseOutputSurface(); | 185 m_client->didLoseOutputSurface(); |
163 } | 186 } |
164 | 187 |
165 } // namespace cc | 188 } // namespace cc |
OLD | NEW |