MCPcopy Create free account
hub / github.com/defold/defold / CollectInvClippers

Function CollectInvClippers

engine/gui/src/gui.cpp:1541–1591  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1539 }
1540
1541 static void CollectInvClippers(HScene scene, uint16_t start_index, dmArray<InternalClippingNode>& clippers, ScopeContext& scope_context, uint16_t parent_index) {
1542 uint32_t index = start_index;
1543 InternalClippingNode* parent = 0x0;
1544 if (parent_index != INVALID_INDEX) {
1545 parent = &clippers[parent_index];
1546 }
1547 while (index != INVALID_INDEX)
1548 {
1549 InternalNode* n = &scene->m_Nodes[index];
1550 if (n->m_Node.m_Enabled)
1551 {
1552 switch (n->m_Node.m_ClippingMode) {
1553 case CLIPPING_MODE_STENCIL:
1554 {
1555 uint32_t clipper_index = clippers.Size();
1556 clippers.SetSize(clipper_index + 1);
1557 InternalClippingNode& clipper = clippers.Back();
1558 clipper.m_NodeIndex = index;
1559 clipper.m_ParentIndex = parent_index;
1560 clipper.m_NextNonInvIndex = INVALID_INDEX;
1561 clipper.m_VisibleRenderKey = ~0ULL;
1562 n->m_ClipperIndex = clipper_index;
1563 if (n->m_Node.m_ClippingInverted) {
1564 StencilScope* parent_scope = 0x0;
1565 if (parent != 0x0) {
1566 parent_scope = &parent->m_ChildScope;
1567 }
1568 UpdateScope(n, clipper.m_Scope, clipper.m_ChildScope, parent_scope, scope_context.m_InvClipperCount, 0, 0, scope_context.m_BitFieldOffset);
1569 ++scope_context.m_InvClipperCount;
1570 CollectInvClippers(scene, n->m_ChildHead, clippers, scope_context, clipper_index);
1571 } else {
1572 // append to linked list
1573 uint16_t* pointer = &scope_context.m_NonInvClipperHead;
1574 if (*pointer != INVALID_INDEX) {
1575 pointer = &clippers[scope_context.m_NonInvClipperTail].m_NextNonInvIndex;
1576 }
1577 *pointer = clipper_index;
1578 scope_context.m_NonInvClipperTail = clipper_index;
1579 ++scope_context.m_ClipperCount;
1580 }
1581 }
1582 break;
1583 case CLIPPING_MODE_NONE:
1584 n->m_ClipperIndex = parent_index;
1585 CollectInvClippers(scene, n->m_ChildHead, clippers, scope_context, parent_index);
1586 break;
1587 }
1588 }
1589 index = n->m_NextIndex;
1590 }
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 {

Callers 1

CollectClippersFunction · 0.85

Calls 3

UpdateScopeFunction · 0.85
SizeMethod · 0.45
SetSizeMethod · 0.45

Tested by

no test coverage detected