| 1591 | } |
| 1592 | |
| 1593 | static void CollectClippers(HScene scene, uint16_t start_index, uint16_t bit_field_offset, uint16_t inv_clipper_count, dmArray<InternalClippingNode>& clippers, uint16_t parent_index) |
| 1594 | { |
| 1595 | ScopeContext context; |
| 1596 | context.m_BitFieldOffset = bit_field_offset; |
| 1597 | context.m_InvClipperCount = inv_clipper_count; |
| 1598 | CollectInvClippers(scene, start_index, clippers, context, parent_index); |
| 1599 | uint16_t non_inv_clipper_index = context.m_NonInvClipperHead; |
| 1600 | uint16_t index = 0; |
| 1601 | while (non_inv_clipper_index != INVALID_INDEX) { |
| 1602 | InternalClippingNode* non_inv_clipper = &clippers[non_inv_clipper_index]; |
| 1603 | StencilScope* parent_scope = 0x0; |
| 1604 | if (non_inv_clipper->m_ParentIndex != INVALID_INDEX) { |
| 1605 | parent_scope = &clippers[non_inv_clipper->m_ParentIndex].m_ChildScope; |
| 1606 | } |
| 1607 | InternalNode* node = &scene->m_Nodes[non_inv_clipper->m_NodeIndex]; |
| 1608 | UpdateScope(node, non_inv_clipper->m_Scope, non_inv_clipper->m_ChildScope, parent_scope, index, context.m_ClipperCount, context.m_InvClipperCount, bit_field_offset); |
| 1609 | uint16_t bit_range = CalcBitRange(context.m_ClipperCount); |
| 1610 | CollectClippers(scene, node->m_ChildHead, context.m_BitFieldOffset + bit_range, context.m_InvClipperCount, clippers, non_inv_clipper_index); |
| 1611 | non_inv_clipper_index = non_inv_clipper->m_NextNonInvIndex; |
| 1612 | ++index; |
| 1613 | } |
| 1614 | } |
| 1615 | |
| 1616 | static uint16_t CollectRenderEntries(HScene scene, uint16_t start_index, uint16_t order, dmArray<InternalClippingNode>& clippers, dmArray<RenderEntry>& render_entries) { |
| 1617 | #define PUSH_RENDER_ENTRY(e) \ |
no test coverage detected