| 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 |