OLD | NEW |
---|---|
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "cc/layer_sorter.h" | 7 #include "cc/layer_sorter.h" |
8 | 8 |
9 #include <deque> | 9 #include <deque> |
10 #include <limits> | 10 #include <limits> |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
107 r)) | 107 r)) |
108 overlapPoints.push_back(r); | 108 overlapPoints.push_back(r); |
109 | 109 |
110 if (overlapPoints.empty()) | 110 if (overlapPoints.empty()) |
111 return None; | 111 return None; |
112 | 112 |
113 // Check the corresponding layer depth value for all overlap points to deter mine | 113 // Check the corresponding layer depth value for all overlap points to deter mine |
114 // which layer is in front. | 114 // which layer is in front. |
115 float maxPositive = 0; | 115 float maxPositive = 0; |
116 float maxNegative = 0; | 116 float maxNegative = 0; |
117 | |
118 // flag to tell us if we've computed an accurate (w.r.t. floating point) ans wer | |
danakj
2012/11/01 20:15:33
All comments should be complete sentences with cap
| |
119 bool accurate = false; | |
117 for (unsigned o = 0; o < overlapPoints.size(); o++) { | 120 for (unsigned o = 0; o < overlapPoints.size(); o++) { |
118 float za = a->layerZFromProjectedPoint(overlapPoints[o]); | 121 float za = a->layerZFromProjectedPoint(overlapPoints[o]); |
119 float zb = b->layerZFromProjectedPoint(overlapPoints[o]); | 122 float zb = b->layerZFromProjectedPoint(overlapPoints[o]); |
120 | 123 |
124 // attempt to avoid issues with layers that are too close together | |
125 // if we have 2-sided quads that are very close together then we draw th em | |
enne (OOO)
2012/11/01 20:08:55
style nit: cc code doesn't obey the Chromium 80 co
| |
126 // in the order they arrived in to avoid z-fighting flickering | |
127 // The correct solution is for the content maker to turn on back-face cu lling | |
128 // or move the quads apart (if they're not two sides of one object) | |
129 float absdif = fabsf(zb - za); | |
130 float absmax = fmax(fabs(zb), fabs(za)); | |
enne (OOO)
2012/11/01 20:08:55
style nit: Can you match the variable style in thi
| |
131 // check to see if we've got a result with a reasonable amount of error | |
132 if (absdif > 1e-4 * absmax) | |
enne (OOO)
2012/11/01 20:08:55
Can you pull this constant out into a named variab
| |
133 accurate = true; | |
134 | |
121 float diff = za - zb; | 135 float diff = za - zb; |
122 if (diff > maxPositive) | 136 if (diff > maxPositive) |
123 maxPositive = diff; | 137 maxPositive = diff; |
124 if (diff < maxNegative) | 138 if (diff < maxNegative) |
125 maxNegative = diff; | 139 maxNegative = diff; |
126 } | 140 } |
127 | 141 |
142 // if we can't tell which should come first, use document order | |
143 if (!accurate) | |
144 return ABeforeB; | |
145 | |
128 float maxDiff = (fabsf(maxPositive) > fabsf(maxNegative) ? maxPositive : max Negative); | 146 float maxDiff = (fabsf(maxPositive) > fabsf(maxNegative) ? maxPositive : max Negative); |
129 | 147 |
130 // If the results are inconsistent (and the z difference substantial to rule out | 148 // If the results are inconsistent (and the z difference substantial to rule out |
131 // numerical errors) then the layers are intersecting. We will still return an | 149 // numerical errors) then the layers are intersecting. We will still return an |
132 // order based on the maximum depth difference but with an edge weight of ze ro | 150 // order based on the maximum depth difference but with an edge weight of ze ro |
133 // these layers will get priority if a graph cycle is present and needs to b e broken. | 151 // these layers will get priority if a graph cycle is present and needs to b e broken. |
134 if (maxPositive > zThreshold && maxNegative < -zThreshold) | 152 if (maxPositive > zThreshold && maxNegative < -zThreshold) |
135 weight = 0; | 153 weight = 0; |
136 else | 154 else |
137 weight = fabsf(maxDiff); | 155 weight = fabsf(maxDiff); |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
403 *it = sortedList[count++]->layer; | 421 *it = sortedList[count++]->layer; |
404 | 422 |
405 DVLOG(2) << "Sorting end ----"; | 423 DVLOG(2) << "Sorting end ----"; |
406 | 424 |
407 m_nodes.clear(); | 425 m_nodes.clear(); |
408 m_edges.clear(); | 426 m_edges.clear(); |
409 m_activeEdges.clear(); | 427 m_activeEdges.clear(); |
410 } | 428 } |
411 | 429 |
412 } | 430 } |
OLD | NEW |