# परतों में बँटा आर्किटेक्चर

> CrossFly का मानसिक नक्शा — app → ui → core → gl → libGDX — और यह विभाजन क्यों मौजूद है।

Source: https://crossfly.dev/hi/docs/concepts/architecture — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# परतों में बँटा आर्किटेक्चर

CrossFly के किसी भी हिस्से को समझने के लिए, पूरे का नक्शा होना मदद करता है। मूल रूप में, **CrossFly libGDX का एक
`ApplicationListener` है** — एक अकेला बिंदु जिसे libGDX एप्लिकेशन को बनाने, आकार बदलने और
रेंडर करने के लिए बुलाता है। इसके चारों ओर, फ्रेमवर्क परतों में संगठित होता है।

<div class="cf-diagram">
<svg role="img" id="my-svg" width="483" height="587" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 483.297px; background-color: transparent;" viewBox="0 0 483.296875 587" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:Manrope,system-ui,sans-serif;font-size:14px;fill:var(--text);}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:var(--bg-elev);}#my-svg .error-text{fill:var(--text-dim);stroke:var(--text-dim);}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:var(--text-dim);stroke:var(--text-dim);}#my-svg .marker.cross{stroke:var(--text-dim);}#my-svg svg{font-family:Manrope,system-ui,sans-serif;font-size:14px;}#my-svg p{margin:0;}#my-svg .label{font-family:Manrope,system-ui,sans-serif;color:var(--text);}#my-svg .cluster-label text{fill:var(--text-dim);}#my-svg .cluster-label span{color:var(--text-dim);}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:var(--text);color:var(--text);}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:var(--bg-soft);stroke:var(--border-strong);stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:var(--text-dim);stroke:var(--text-dim);stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:var(--text-dim)!important;stroke-width:0;stroke:var(--text-dim);}#my-svg .arrowheadPath{fill:rgba(255, 255, 255, 0);}#my-svg .edgePath .path{stroke:var(--text-dim);stroke-width:1px;}#my-svg .flowchart-link{stroke:var(--text-dim);fill:none;}#my-svg .edgeLabel{background-color:var(--bg-elev);text-align:center;}#my-svg .edgeLabel p{background-color:var(--bg-elev);}#my-svg .edgeLabel rect{opacity:0.5;background-color:var(--bg-elev);fill:var(--bg-elev);}#my-svg .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#my-svg .cluster rect{fill:var(--bg-elev);stroke:hsl(0, 0%, 90%);stroke-width:1px;}#my-svg .cluster text{fill:var(--text-dim);}#my-svg .cluster span{color:var(--text-dim);}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:Manrope,system-ui,sans-serif;font-size:12px;background:var(--bg-elev);border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:var(--text);}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:var(--bg-elev);text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:var(--bg-elev);padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:var(--bg-elev);fill:var(--bg-elev);}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:var(--border-strong);}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].swimlane.cluster rect{filter:none;}#my-svg [data-look="neo"].node path{stroke:url(#my-svg-gradient);stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node .neo-line path{stroke:var(--border-strong);filter:none;}#my-svg [data-look="neo"].node circle{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].node circle .state-start{fill:var(--text-dim);}#my-svg [data-look="neo"].icon-shape .icon{fill:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:url(#my-svg-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#my-svg :root{--mermaid-font-family:Manrope,system-ui,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"/><g class="edgePaths"><path d="M231.887,78L231.887,82.167C231.887,86.333,231.887,94.667,231.887,102.333C231.887,110,231.887,117,231.887,120.5L231.887,124" id="my-svg-L_App_UI_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_App_UI_0" data-points="W3sieCI6MjMxLjg4NjcxODc1LCJ5Ijo3OH0seyJ4IjoyMzEuODg2NzE4NzUsInkiOjEwM30seyJ4IjoyMzEuODg2NzE4NzUsInkiOjEyOH1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M231.887,198L231.887,202.167C231.887,206.333,231.887,214.667,231.887,222.333C231.887,230,231.887,237,231.887,240.5L231.887,244" id="my-svg-L_UI_Core_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_UI_Core_0" data-points="W3sieCI6MjMxLjg4NjcxODc1LCJ5IjoxOTh9LHsieCI6MjMxLjg4NjcxODc1LCJ5IjoyMjN9LHsieCI6MjMxLjg4NjcxODc1LCJ5IjoyNDh9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M159.242,339L149.795,344.917C140.349,350.833,121.456,362.667,112.009,373.833C102.563,385,102.563,395.5,102.563,400.75L102.563,406" id="my-svg-L_Core_GL_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Core_GL_0" data-points="W3sieCI6MTU5LjI0MTYzMjkwODk1MDYzLCJ5IjozMzl9LHsieCI6MTAyLjU2MjUsInkiOjM3NC41fSx7IngiOjEwMi41NjI1LCJ5Ijo0MTB9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M102.563,480L102.563,484.167C102.563,488.333,102.563,496.667,102.563,504.333C102.563,512,102.563,519,102.563,522.5L102.563,526" id="my-svg-L_GL_LibGDX_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_GL_LibGDX_0" data-points="W3sieCI6MTAyLjU2MjUsInkiOjQ4MH0seyJ4IjoxMDIuNTYyNSwieSI6NTA1fSx7IngiOjEwMi41NjI1LCJ5Ijo1MzB9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M304.532,339L313.978,344.917C323.425,350.833,342.318,362.667,351.764,373.833C361.211,385,361.211,395.5,361.211,400.75L361.211,406" id="my-svg-L_Core_Serv_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Core_Serv_0" data-points="W3sieCI6MzA0LjUzMTgwNDU5MTA0OTM3LCJ5IjozMzl9LHsieCI6MzYxLjIxMDkzNzUsInkiOjM3NC41fSx7IngiOjM2MS4yMTA5Mzc1LCJ5Ijo0MTB9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_App_UI_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_UI_Core_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_Core_GL_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_GL_LibGDX_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(361.2109375, 374.5)"><g class="label" data-id="L_Core_Serv_0" transform="translate(-18.5703125, -10.5)"><foreignObject width="37.140625" height="21"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>उपयोग</p></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="my-svg-flowchart-App-0" data-look="classic" transform="translate(231.88671875, 43)"><rect class="basic label-container" style="" x="-110.1171875" y="-35" width="220.234375" height="70"/><g class="label" style="" transform="translate(-82.1171875, -21)"><rect/><foreignObject width="164.234375" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p><b>app</b> — आपका कोड<br />(Windows, कंपोनेंट, लॉजिक)</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-UI-1" data-look="classic" transform="translate(231.88671875, 163)"><rect class="basic label-container" style="" x="-111.921875" y="-35" width="223.84375" height="70"/><g class="label" style="" transform="translate(-83.921875, -21)"><rect/><foreignObject width="167.84375" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p><b>ui</b> — सब कुछ Component है<br />(widgets, लेआउट, स्टाइल)</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Core-3" data-look="classic" transform="translate(231.88671875, 293.5)"><rect class="basic label-container" style="" x="-128" y="-45.5" width="256" height="91"/><g class="label" style="" transform="translate(-100, -31.5)"><rect/><foreignObject width="200" height="63"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p><b>core / kernel</b><br />(bootstrap, input, लाइफसाइकल, config)</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-GL-5" data-look="classic" transform="translate(102.5625, 445)"><rect class="basic label-container" style="" x="-94.5625" y="-35" width="189.125" height="70"/><g class="label" style="" transform="translate(-66.5625, -21)"><rect/><foreignObject width="133.125" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p><b>gl</b> — प्रति-प्रिमिटिव रेंडरर<br />(ड्रॉइंग → draw calls)</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-LibGDX-7" data-look="classic" transform="translate(102.5625, 554.5)"><rect class="basic label-container" style="" x="-87.390625" y="-24.5" width="174.78125" height="49"/><g class="label" style="" transform="translate(-59.390625, -10.5)"><rect/><foreignObject width="118.78125" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p><b>libGDX + OpenGL</b></p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Serv-9" data-look="classic" transform="translate(361.2109375, 445)"><rect class="basic label-container" style="" x="-114.0859375" y="-35" width="228.171875" height="70"/><g class="label" style="" transform="translate(-86.0859375, -21)"><rect/><foreignObject width="172.171875" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p><b>सेवाएँ</b> — sqlite, device, map<br />(UI-स्वतंत्र मॉड्यूल)</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="var(--text-dim)"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="var(--text-dim)"/></filter></defs><linearGradient id="my-svg-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" stop-color="var(--border-strong)" stop-opacity="1"/><stop offset="100%" stop-color="hsl(0, 0%, 90%)" stop-opacity="1"/></linearGradient></svg>
</div>

## हर परत क्या करती है
- **app** — आपका कोड: `Window` की सबक्लासें (स्क्रीनें), कंपोनेंट, व्यावसायिक नियम। यहीं आप रहते हैं।
- **ui** — UI लाइब्रेरी: **सब कुछ `Component` से व्युत्पन्न होता है** (widgets, containers, स्टाइल, layouts)।
  देखें [सब कुछ एक Component है](/docs/concepts/everything-is-a-component)।
- **core / kernel** — एप्लिकेशन को दुनिया से जोड़ता है: `Main` (यानी `ApplicationListener`) bootstrap करता है,
  input पहुँचाता है, जीवनचक्र चालू करता है और डिवाइस की कॉन्फ़िगरेशन लोड करता है। देखें [जीवनचक्र](/docs/concepts/lifecycle)।
- **gl** — उच्च-स्तरीय चित्रण (`Paint`) को OpenGL *draw calls* में अनुवादित करता है, प्रत्येक प्रिमिटिव के लिए
  एक रेंडरर के साथ। देखें [रेंडरिंग पाइपलाइन](/docs/concepts/rendering-pipeline)।
- **serviços** — SQLite, device, map आदि: **UI से स्वतंत्र** मॉड्यूल, जिन्हें app माँग पर उपयोग करती है।

## यह विभाजन क्यों मायने रखता है
- आप **लगभग हमेशा `ui` परत में प्रोग्रामिंग करते हैं** (`Component`s को जोड़-मिलाकर)। नीचे की परतें कार्यान्वयन का
  विवरण हैं — आप शायद ही कभी `gl` को छूते हैं या libGDX से सीधे बात करते हैं।
- फ्रेमवर्क **paint thread पर single-thread है** (देखें [paint thread](/docs/concepts/the-paint-thread)): `Main`
  `create()`/`render()`/`resize()` को हमेशा उसी thread पर बुलाता है, और सारी UI उसी पर होती है।
- **सेवाएँ UI पर निर्भर नहीं करतीं** — बिना स्क्रीन बनाए SQLite या device का उपयोग किया जा सकता है, और UI इन
  मॉड्यूल के बारे में तब तक "नहीं जानती" जब तक आप उन्हें नहीं बुलाते।

## नियंत्रण का प्रवाह, उच्च स्तर पर
1. libGDX `Main` बनाता है और paint thread पर `create()` को बुलाता है।
2. `Main` bootstrap करता है (प्लेटफ़ॉर्म, runtime, config) और **रिफ्लेक्शन के ज़रिए मुख्य विंडो को इंस्टैंशिएट
   करता है**, उसके `onShow()` को बुलाते हुए।
3. हर frame पर, libGDX `render()` को बुलाता है; `EventsProcessor` **विंडो के स्टैक** को पेंट करता है (सबसे ऊपर
   वाली सबसे ऊपर) — पर **केवल तभी जब कोई render का अनुरोध हो** (`repaint()`), लगातार नहीं।
4. Input और `resize` `Main` के callbacks के ज़रिए आते हैं, हमेशा paint thread पर।

> यह मानसिक नक्शा है, पैकेजों की सूची नहीं। परत-दर-परत पैकेज और क्लास की सूची के लिए, तकनीकी संदर्भ देखें।

## यह भी देखें
- आगे: [सब कुछ एक Component है](/docs/concepts/everything-is-a-component) · [जीवनचक्र](/docs/concepts/lifecycle)
