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

Function CollectRenderEntries

engine/gui/src/gui.cpp:1616–1702  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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) \
1618 if (render_entries.Full()) \
1619 render_entries.OffsetCapacity(16U); \
1620 render_entries.Push(e);
1621
1622 uint16_t index = start_index;
1623 uint32_t active_nodes = 0;
1624 while (index != INVALID_INDEX) {
1625 InternalNode* n = &scene->m_Nodes[index];
1626 if (n->m_Node.m_Enabled) {
1627 ++active_nodes;
1628 HNode node = GetNodeHandle(n);
1629 uint16_t layer = GetLayerIndex(scene, n);
1630 if (n->m_ClipperIndex != INVALID_INDEX) {
1631 InternalClippingNode& clipper = clippers[n->m_ClipperIndex];
1632 if (clipper.m_NodeIndex == index) {
1633 uint64_t clipping_key = CalcRenderKey(layer, order++);
1634 uint64_t render_key = CalcRenderKey(layer, order++);
1635
1636 order = CollectRenderEntries(scene, n->m_ChildHead, order, clippers, render_entries);
1637
1638 clipper.m_VisibleRenderKey = render_key;
1639
1640 RenderEntry entry;
1641 entry.m_Node = node;
1642 entry.m_RenderKey = clipping_key;
1643
1644 PUSH_RENDER_ENTRY(entry);
1645
1646 if (n->m_Node.m_ClippingVisible) {
1647 entry.m_RenderKey = render_key;
1648 PUSH_RENDER_ENTRY(entry);
1649 }
1650
1651 index = n->m_NextIndex;
1652 continue;
1653 }
1654 }
1655
1656 if (n->m_Node.m_NodeType == NODE_TYPE_PARTICLEFX)
1657 {
1658 HNode hnode = GetNodeHandle(n);
1659 uint32_t alive_count = scene->m_AliveParticlefxs.Size();
1660 for (uint32_t i = 0; i < alive_count; ++i)
1661 {
1662 ParticlefxComponent* comp = &scene->m_AliveParticlefxs[i];
1663 if (hnode == comp->m_Node)
1664 {
1665 uint32_t emitter_count = dmParticle::GetInstanceEmitterCount(scene->m_ParticlefxContext, comp->m_Instance);
1666
1667 // Create a render entry for each emitter
1668 for (uint32_t emitter_i = 0; emitter_i < emitter_count; ++emitter_i)
1669 {
1670 dmParticle::EmitterRenderData* emitter_render_data;
1671 dmParticle::GetEmitterRenderData(scene->m_ParticlefxContext, comp->m_Instance, emitter_i, &emitter_render_data);
1672
1673 if (emitter_render_data == 0x0)

Callers 1

CollectNodesFunction · 0.85

Calls 6

CalcRenderKeyFunction · 0.85
GetInstanceEmitterCountFunction · 0.85
GetEmitterRenderDataFunction · 0.85
GetNodeHandleFunction · 0.70
GetLayerIndexFunction · 0.70
SizeMethod · 0.45

Tested by

no test coverage detected