Index: mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc |
diff --git a/mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc b/mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc |
index 7d1798ea6ae58c8e6c72e708db88cd09882f5c2e..6246de661179281c390dcac00b1369e63181ddda 100644 |
--- a/mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc |
+++ b/mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc |
@@ -239,7 +239,7 @@ QuadPtr TypeConverter<QuadPtr, cc::DrawQuad>::Convert( |
// This is intentionally left set to an invalid value here. It's set when |
// converting an entire pass since it's an index into the pass' shared quad |
// state list. |
- quad->shared_quad_state_index = -1; |
+ quad->shared_quad_state_index = UINT32_MAX; |
switch (input.material) { |
case cc::DrawQuad::RENDER_PASS: { |
const cc::RenderPassDrawQuad* render_pass_quad = |
@@ -357,25 +357,25 @@ PassPtr TypeConverter<PassPtr, cc::RenderPass>::Convert( |
Array<QuadPtr> quads(input.quad_list.size()); |
Array<SharedQuadStatePtr> shared_quad_state( |
input.shared_quad_state_list.size()); |
- int sqs_i = -1; |
- const cc::SharedQuadState* last_sqs = NULL; |
- size_t i = 0; |
+ const cc::SharedQuadState* last_sqs = nullptr; |
+ cc::SharedQuadStateList::ConstIterator next_sqs_iter = |
+ input.shared_quad_state_list.begin(); |
for (cc::QuadList::ConstIterator iter = input.quad_list.begin(); |
iter != input.quad_list.end(); |
++iter) { |
const cc::DrawQuad& quad = *iter; |
- quads[i] = Quad::From(quad); |
+ quads[iter.index()] = Quad::From(quad); |
if (quad.shared_quad_state != last_sqs) { |
- sqs_i++; |
- shared_quad_state[sqs_i] = |
- SharedQuadState::From(*input.shared_quad_state_list[sqs_i]); |
- last_sqs = quad.shared_quad_state; |
+ shared_quad_state[next_sqs_iter.index()] = |
+ SharedQuadState::From(*next_sqs_iter); |
+ last_sqs = &*next_sqs_iter; |
+ ++next_sqs_iter; |
} |
- quads[i]->shared_quad_state_index = sqs_i; |
- ++i; |
+ quads[iter.index()]->shared_quad_state_index = next_sqs_iter.index() - 1; |
} |
// We should copy all shared quad states. |
- DCHECK_EQ(static_cast<size_t>(sqs_i + 1), shared_quad_state.size()); |
+ DCHECK_EQ(static_cast<size_t>(next_sqs_iter.index()), |
danakj
2014/10/02 15:32:48
static cast needed?
weiliangc
2014/10/02 22:01:40
No longer needed.
weiliangc
2014/10/02 22:01:40
Done.
|
+ shared_quad_state.size()); |
pass->quads = quads.Pass(); |
pass->shared_quad_states = shared_quad_state.Pass(); |
return pass.Pass(); |
@@ -385,23 +385,24 @@ PassPtr TypeConverter<PassPtr, cc::RenderPass>::Convert( |
scoped_ptr<cc::RenderPass> |
TypeConverter<scoped_ptr<cc::RenderPass>, PassPtr>::Convert( |
const PassPtr& input) { |
- // TODO(weiliangc): RenderPass will have a constructor that takes in preset |
- // size of quad list and shared quad state list size in upcoming CL. |
- scoped_ptr<cc::RenderPass> pass = cc::RenderPass::Create(); |
+ scoped_ptr<cc::RenderPass> pass = cc::RenderPass::Create( |
+ input->shared_quad_states.size(), input->quads.size()); |
pass->SetAll(cc::RenderPassId(1, input->id), |
input->output_rect.To<gfx::Rect>(), |
input->damage_rect.To<gfx::Rect>(), |
input->transform_to_root_target.To<gfx::Transform>(), |
input->has_transparent_background); |
- cc::SharedQuadStateList& sqs_list = pass->shared_quad_state_list; |
- sqs_list.reserve(input->shared_quad_states.size()); |
for (size_t i = 0; i < input->shared_quad_states.size(); ++i) { |
ConvertSharedQuadState(input->shared_quad_states[i], pass.get()); |
} |
+ cc::SharedQuadStateList::Iterator sqs_iter = |
+ pass->shared_quad_state_list.begin(); |
for (size_t i = 0; i < input->quads.size(); ++i) { |
QuadPtr quad = input->quads[i].Pass(); |
- if (!ConvertDrawQuad( |
- quad, sqs_list[quad->shared_quad_state_index], pass.get())) |
+ while (quad->shared_quad_state_index > sqs_iter.index()) { |
+ ++sqs_iter; |
+ } |
+ if (!ConvertDrawQuad(quad, &*sqs_iter, pass.get())) |
return scoped_ptr<cc::RenderPass>(); |
} |
return pass.Pass(); |