AgnosiaEngine/Flowgraph.svg

1 line
59 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="2064px" preserveAspectRatio="none" style="width:2166px;height:2064px;background:#1B1B1B;" version="1.1" viewBox="0 0 2166 2064" width="2166px" zoomAndPan="magnify"><title>Main Execution</title><defs/><g><rect fill="#1B1B1B" height="2064" style="stroke:none;stroke-width:1.0;" width="2166" x="0" y="0"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="107.5756" x="1028.1039" y="34.9659">Main Execution</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="48.4642" x="1048.1596" y="51.0679"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="28.4642" x="1058.1596" y="73.896">main</text><rect fill="#313139" height="36.3441" style="stroke:#E7E7E7;stroke-width:0.5;" width="47.6842" x="1048.5497" y="107.412"/><line style="stroke:#E7E7E7;stroke-width:0.5;" x1="1053.5497" x2="1053.5497" y1="107.412" y2="143.7561"/><line style="stroke:#E7E7E7;stroke-width:0.5;" x1="1091.2338" x2="1091.2338" y1="107.412" y2="143.7561"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" font-weight="bold" lengthAdjust="spacing" textLength="27.6842" x="1058.5497" y="130.2401">run()</text><line style="stroke:#E7E7E7;stroke-width:1.5;" x1="407.8729" x2="1822.316" y1="163.7561" y2="163.7561"/><rect fill="#313139" height="36.3441" style="stroke:#E7E7E7;stroke-width:0.5;" width="92.5765" x="361.5847" y="894.3498"/><line style="stroke:#E7E7E7;stroke-width:0.5;" x1="366.5847" x2="366.5847" y1="894.3498" y2="930.6939"/><line style="stroke:#E7E7E7;stroke-width:0.5;" x1="449.1612" x2="449.1612" y1="894.3498" y2="930.6939"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" font-weight="bold" lengthAdjust="spacing" textLength="72.5765" x="371.5847" y="917.1779">initWindow()</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="70.1483" x="372.7987" y="965.6939"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="50.1483" x="382.7987" y="988.522">glfwInit()</text><path d="M11.329,1041.3571 L11.329,1069.0631 A0,0 0 0 0 11.329,1069.0631 L287.4283,1069.0631 A0,0 0 0 0 287.4283,1069.0631 L287.4283,1059.3571 L307.4283,1055.2101 L287.4283,1051.3571 L287.4283,1051.3571 L277.4283,1041.3571 L11.329,1041.3571 A0,0 0 0 0 11.329,1041.3571 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M277.4283,1041.3571 L277.4283,1051.3571 L287.4283,1051.3571 L277.4283,1041.3571 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="255.0992" x="17.329" y="1060.2541">Create window and initialize default settings</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="200.8893" x="307.4283" y="1037.038"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="180.8893" x="317.4283" y="1059.8661">window = glfwCreateWindow(...)</text><path d="M27.1421,1112.7012 L27.1421,1140.4072 A0,0 0 0 0 27.1421,1140.4072 L292.0483,1140.4072 A0,0 0 0 0 292.0483,1140.4072 L292.0483,1130.7012 L312.0483,1126.5542 L292.0483,1122.7012 L292.0483,1122.7012 L282.0483,1112.7012 L27.1421,1112.7012 A0,0 0 0 0 27.1421,1112.7012 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M282.0483,1112.7012 L282.0483,1122.7012 L292.0483,1122.7012 L282.0483,1112.7012 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="243.9062" x="33.1421" y="1131.5982">Set the user-defined pointer of the window</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="191.6492" x="312.0483" y="1108.3821"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="171.6492" x="322.0483" y="1131.2102">glfwSetWindowUserPointer(...)</text><path d="M10,1179.7262 L10,1242.8443 A0,0 0 0 0 10,1242.8443 L278.8062,1242.8443 A0,0 0 0 0 278.8062,1242.8443 L278.8062,1215.2853 L298.8062,1211.2853 L278.8062,1207.2853 L278.8062,1189.7262 L268.8062,1179.7262 L10,1179.7262 A0,0 0 0 0 10,1179.7262 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M268.8062,1179.7262 L268.8062,1189.7262 L278.8062,1189.7262 L268.8062,1179.7262 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="244.3872" x="16" y="1198.6233">This is a callback to resizing of the window</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="247.8062" x="16" y="1216.3293">we call and set a bool to true, which we get</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="221.3772" x="16" y="1234.0353">and rebuild the swap chain when true.</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="218.1334" x="298.8062" y="1193.1132"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="198.1334" x="308.8062" y="1215.9413">glfwSetFramebufferSizeCallback(...)</text><ellipse cx="407.8729" cy="1288.8443" fill="none" rx="11" ry="11" style="stroke:#DDDDDD;stroke-width:1.0;"/><ellipse cx="407.8729" cy="1288.8443" fill="#DDDDDD" rx="6" ry="6" style="stroke:#DDDDDD;stroke-width:1.0;"/><rect fill="#313139" height="36.3441" style="stroke:#E7E7E7;stroke-width:0.5;" width="86.5164" x="964.5728" y="183.7561"/><line style="stroke:#E7E7E7;stroke-width:0.5;" x1="969.5728" x2="969.5728" y1="183.7561" y2="220.1003"/><line style="stroke:#E7E7E7;stroke-width:0.5;" x1="1046.0893" x2="1046.0893" y1="183.7561" y2="220.1003"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" font-weight="bold" lengthAdjust="spacing" textLength="66.5164" x="974.5728" y="206.5842">initVulkan()</text><line style="stroke:#E7E7E7;stroke-width:1.5;" x1="690.7627" x2="1007.8311" y1="240.1003" y2="240.1003"/><rect fill="#313139" height="36.3441" style="stroke:#E7E7E7;stroke-width:0.5;" width="113.6966" x="633.9144" y="842.3926"/><line style="stroke:#E7E7E7;stroke-width:0.5;" x1="638.9144" x2="638.9144" y1="842.3926" y2="878.7368"/><line style="stroke:#E7E7E7;stroke-width:0.5;" x1="742.611" x2="742.611" y1="842.3926" y2="878.7368"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" font-weight="bold" lengthAdjust="spacing" textLength="93.6966" x="643.9144" y="865.2207">createInstance()</text><line style="stroke:#E7E7E7;stroke-width:1.5;" x1="690.7627" x2="690.7627" y1="913.7368" y2="913.7368"/><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="262.3177" x="559.6039" y="935.2368"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="242.3177" x="569.6039" y="958.0648">Debug::checkUnavailableValidationLayers()</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="184.8571" x="598.3341" y="1006.5809"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="108.2527" x="608.3341" y="1029.409">VkApplicationInfo</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="53.4844" x="719.7069" y="1029.409">appInfo{}</text><rect fill="#313139" height="52.6882" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="204.9453" x="588.29" y="1077.925"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="175.1892" x="598.29" y="1100.7531">set appInfo data, Vulkan version,</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="184.9453" x="598.29" y="1117.0972">Engine version and name, and title</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="238.4135" x="571.5559" y="1165.6132"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="147.985" x="581.5559" y="1188.4413">VkApplicationCreateInfo</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="67.3085" x="732.661" y="1188.4413">createInfo{}</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="241.1255" x="570.1999" y="1236.9573"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="221.1255" x="580.1999" y="1259.7854">createInfo.pApplicationInfo = &amp;appInfo</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="327.6461" x="526.9396" y="1308.3014"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="307.6461" x="536.9396" y="1331.1295">Debug::vulkanDebugSetup(createInfo, vulkaninstance)</text><line style="stroke:#E7E7E7;stroke-width:1.5;" x1="690.7627" x2="690.7627" y1="1364.6456" y2="1364.6456"/><path d="M1158.3395,264.4193 L1158.3395,274.2723 L1138.3395,278.2723 L1158.3395,282.2723 L1158.3395,292.1253 A0,0 0 0 0 1158.3395,292.1253 L1461.8428,292.1253 A0,0 0 0 0 1461.8428,292.1253 L1461.8428,274.4193 L1451.8428,264.4193 L1158.3395,264.4193 A0,0 0 0 0 1158.3395,264.4193 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1451.8428,264.4193 L1451.8428,274.4193 L1461.8428,274.4193 L1451.8428,264.4193 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="282.5033" x="1164.3395" y="283.3163">Setup debug messenger, print data to console</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="273.7538" x="864.5857" y="260.1003"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="253.7538" x="874.5857" y="282.9283">Debug::setupDebugMessenger(VkInstance&amp;)</text><path d="M1114.5212,306.4444 L1114.5212,339.0034 L1094.5212,343.0034 L1114.5212,347.0034 L1114.5212,379.5624 A0,0 0 0 0 1114.5212,379.5624 L1502.4596,379.5624 A0,0 0 0 0 1502.4596,379.5624 L1502.4596,316.4444 L1492.4596,306.4444 L1114.5212,306.4444 A0,0 0 0 0 1114.5212,306.4444 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1492.4596,306.4444 L1492.4596,316.4444 L1502.4596,316.4444 L1492.4596,306.4444 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="303.5373" x="1120.5212" y="325.3414">This function handles Window System Integration</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="366.9384" x="1120.5212" y="343.0474">automatically across platforms based on build environment.</text><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1114.5212" x2="1502.4596" y1="351.8564" y2="351.8564"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1114.5212" x2="1502.4596" y1="353.8564" y2="353.8564"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="363.6884" x="1120.5212" y="370.7534">Basically, this is an abstraction of the Window across platforms</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="186.1172" x="908.404" y="324.8313"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="166.1172" x="918.404" y="347.6594">glfwCreateWindowSurface(...)</text><rect fill="none" height="359.7122" style="stroke:#FFFFFF;stroke-width:1.5;" width="515.0841" x="916.9502" y="389.5624"/><path d="M1025.4398,389.5624 L1025.4398,401.6303 L1015.4398,411.6303 L916.9502,411.6303 " fill="none" style="stroke:#FFFFFF;stroke-width:1.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="98.4896" x="919.9502" y="405.5284">DeviceControl</text><path d="M1092.447,421.6303 L1092.447,463.0424 L1072.447,467.0424 L1092.447,471.0424 L1092.447,512.4544 A0,0 0 0 0 1092.447,512.4544 L1374.7343,512.4544 A0,0 0 0 0 1374.7343,512.4544 L1374.7343,431.6303 L1364.7343,421.6303 L1092.447,421.6303 A0,0 0 0 0 1092.447,421.6303 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1364.7343,421.6303 L1364.7343,431.6303 L1374.7343,431.6303 L1364.7343,421.6303 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="198.4452" x="1098.447" y="440.5274">Enumerate through GPU's in the</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="229.3332" x="1098.447" y="458.2334">system and choose a compatible one.</text><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1092.447" x2="1374.7343" y1="467.0424" y2="467.0424"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1092.447" x2="1374.7343" y1="469.0424" y2="469.0424"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="237.0942" x="1098.447" y="485.9394">in the future, this should choose the BEST</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="3.38" x="1335.5413" y="485.9394">&#160;</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="261.2873" x="1098.447" y="503.6454">GPU, not just the first one that is compatible..</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="141.9688" x="930.4782" y="448.8703"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="121.9688" x="940.4782" y="471.6984">pickPhysicalDevice(...)</text><path d="M1095.9751,527.9204 L1095.9751,546.6265 L1075.9751,550.6265 L1095.9751,554.6265 L1095.9751,573.3325 A0,0 0 0 0 1095.9751,573.3325 L1331.5013,573.3325 A0,0 0 0 0 1331.5013,573.3325 L1331.5013,537.9204 L1321.5013,527.9204 L1095.9751,527.9204 A0,0 0 0 0 1095.9751,527.9204 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1321.5013,527.9204 L1321.5013,537.9204 L1331.5013,537.9204 L1321.5013,527.9204 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="201.9942" x="1101.9751" y="546.8175">Logical devices interface with the</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="214.5262" x="1101.9751" y="564.5235">physical device and defines queues</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="149.0249" x="926.9502" y="532.4544"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="129.0249" x="936.9502" y="555.2825">createLogicalDevice(...)</text><path d="M1088.733,583.3325 L1088.733,619.7445 L1068.733,623.7445 L1088.733,627.7445 L1088.733,664.1565 A0,0 0 0 0 1088.733,664.1565 L1416.8582,664.1565 A0,0 0 0 0 1416.8582,664.1565 L1416.8582,593.3325 L1406.8582,583.3325 L1088.733,583.3325 A0,0 0 0 0 1088.733,583.3325 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1406.8582,583.3325 L1406.8582,593.3325 L1416.8582,593.3325 L1406.8582,583.3325 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="303.7452" x="1094.733" y="602.2295">Swap Chains are used to handle buffer ownership</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="280.7872" x="1094.733" y="619.9355">infrastructure. Being platform agnostic has its</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="243.4902" x="1094.733" y="637.6415">complications, this is a perfect example.</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="227.9032" x="1094.733" y="655.3475">This process is HEAVILY documented.</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="134.5408" x="934.1922" y="605.5725"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="114.5408" x="944.1922" y="628.4005">createSwapChain(...)</text><path d="M1091.751,674.1565 L1091.751,701.7156 L1071.751,705.7156 L1091.751,709.7156 L1091.751,737.2746 A0,0 0 0 0 1091.751,737.2746 L1422.0343,737.2746 A0,0 0 0 0 1422.0343,737.2746 L1422.0343,684.1565 L1412.0343,674.1565 L1091.751,674.1565 A0,0 0 0 0 1091.751,674.1565 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1412.0343,674.1565 L1412.0343,684.1565 L1422.0343,684.1565 L1412.0343,674.1565 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="224.0292" x="1097.751" y="693.0536">This is a cool function, quite a simple</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="288.8473" x="1097.751" y="710.7596">description of images that will be shown on the</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="157.8331" x="1097.751" y="728.4656">screen! It also determines</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="24.245" x="1258.9642" y="728.4656">how</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="120.4451" x="1286.5892" y="728.4656">to access the image</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="140.5768" x="931.1742" y="687.5435"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="120.5768" x="941.1742" y="710.3716">createImageViews(...)</text><path d="M1120.2092,759.2746 L1120.2092,786.8336 L1100.2092,790.8336 L1120.2092,794.8336 L1120.2092,822.3926 A0,0 0 0 0 1120.2092,822.3926 L1452.2606,822.3926 A0,0 0 0 0 1452.2606,822.3926 L1452.2606,769.2746 L1442.2606,759.2746 L1120.2092,759.2746 A0,0 0 0 0 1120.2092,759.2746 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1442.2606,759.2746 L1442.2606,769.2746 L1452.2606,769.2746 L1442.2606,759.2746 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="307.6713" x="1126.2092" y="778.1716">This is pretty simple, it sets up the image bit depth</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="310.0633" x="1126.2092" y="795.8776">and the color bit depth! Basically, the format of the</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="249.1063" x="1126.2092" y="813.5836">displayed images, simple, but important!</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="197.4932" x="902.716" y="772.6616"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="52.6564" x="912.716" y="795.4897">Graphics</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="124.8369" x="965.3724" y="795.4897">::createRenderPass(...)</text><path d="M1135.2333,857.2 L1135.2333,893.6121 L1115.2333,897.6121 L1135.2333,901.6121 L1135.2333,938.0241 A0,0 0 0 0 1135.2333,938.0241 L1503.5807,938.0241 A0,0 0 0 0 1503.5807,938.0241 L1503.5807,867.2 L1493.5807,857.2 L1135.2333,857.2 A0,0 0 0 0 1135.2333,857.2 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1493.5807,857.2 L1493.5807,867.2 L1503.5807,867.2 L1493.5807,857.2 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="323.7393" x="1141.2333" y="876.0971">This function creates a table of pointers to the stored</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="325.9492" x="1141.2333" y="893.8031">data that we want, in this case it would be pointing to</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="343.9673" x="1141.2333" y="911.5091">pre-programmed model view and projection values, and</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="93.6651" x="1141.2333" y="929.2151">a time variable.</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="227.5414" x="887.6919" y="879.44"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="43.7403" x="897.6919" y="902.2681">Buffers</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="163.8011" x="941.4322" y="902.2681">::createDescriptorSetLayout()</text><rect fill="none" height="300.716" style="stroke:#FFFFFF;stroke-width:1.5;" width="600.4923" x="908.0281" y="973.0241"/><path d="M979.4599,973.0241 L979.4599,985.092 L969.4599,995.092 L908.0281,995.092 " fill="none" style="stroke:#FFFFFF;stroke-width:1.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="61.4318" x="911.0281" y="988.99">Graphics</text><path d="M1104.8971,1012.092 L1104.8971,1039.6511 L1084.8971,1043.6511 L1104.8971,1047.6511 L1104.8971,1075.2101 A0,0 0 0 0 1104.8971,1075.2101 L1439.1064,1075.2101 A0,0 0 0 0 1439.1064,1075.2101 L1439.1064,1022.092 L1429.1064,1012.092 L1104.8971,1012.092 A0,0 0 0 0 1104.8971,1012.092 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1429.1064,1012.092 L1429.1064,1022.092 L1439.1064,1022.092 L1429.1064,1012.092 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="308.7243" x="1110.8971" y="1030.989">This is a complex function that goes through every</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="313.2093" x="1110.8971" y="1048.6951">step of the render pipeline and sets the settings we</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="124.0981" x="1110.8971" y="1066.4011">desire for each step!</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="55.1591" x="1238.3752" y="1066.4011">HEAVILY</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81.1591" x="1296.9143" y="1066.4011">documented.</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="166.869" x="918.0281" y="1025.479"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="146.869" x="928.0281" y="1048.3071">createGraphicsPipeline(...)</text><path d="M1095.7591,1110.2101 L1095.7591,1128.9161 L1075.7591,1132.9161 L1095.7591,1136.9161 L1095.7591,1155.6221 A0,0 0 0 0 1095.7591,1155.6221 L1440.4983,1155.6221 A0,0 0 0 0 1440.4983,1155.6221 L1440.4983,1120.2101 L1430.4983,1110.2101 L1095.7591,1110.2101 A0,0 0 0 0 1095.7591,1110.2101 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1430.4983,1110.2101 L1430.4983,1120.2101 L1440.4983,1120.2101 L1430.4983,1110.2101 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="320.3593" x="1101.7591" y="1129.1071">This function creates framebuffers for all the images</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="295.5163" x="1101.7591" y="1146.8131">that are queued to be displayed, very important!</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="148.5929" x="927.1662" y="1114.744"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="128.5929" x="937.1662" y="1137.5721">createFramebuffers(...)</text><path d="M1099.3891,1190.6221 L1099.3891,1218.1811 L1079.3891,1222.1811 L1099.3891,1226.1811 L1099.3891,1253.7402 A0,0 0 0 0 1099.3891,1253.7402 L1498.5204,1253.7402 A0,0 0 0 0 1498.5204,1253.7402 L1498.5204,1200.6221 L1488.5204,1190.6221 L1099.3891,1190.6221 A0,0 0 0 0 1099.3891,1190.6221 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1488.5204,1190.6221 L1488.5204,1200.6221 L1498.5204,1200.6221 L1488.5204,1190.6221 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="357.0842" x="1105.3891" y="1209.5191">Commands in Vulkan are not executed using function calls</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="374.7513" x="1105.3891" y="1227.2251">You have to record the ops you want to perform to command</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="361.5562" x="1105.3891" y="1244.9312">buffer objects, pools manage the memory used for buffers.</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="155.853" x="923.5361" y="1204.0091"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="135.853" x="933.5361" y="1226.8372">createCommandPool(...)</text><rect fill="none" height="495.1882" style="stroke:#FFFFFF;stroke-width:1.5;" width="631.9444" x="902.7781" y="1308.7402"/><path d="M963.8079,1308.7402 L963.8079,1320.8081 L953.8079,1330.8081 L902.7781,1330.8081 " fill="none" style="stroke:#FFFFFF;stroke-width:1.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="51.0298" x="905.7781" y="1324.7061">Buffers</text><path d="M1088.505,1347.8081 L1088.505,1375.3671 L1068.505,1379.3671 L1088.505,1383.3671 L1088.505,1410.9261 A0,0 0 0 0 1088.505,1410.9261 L1440.4852,1410.9261 A0,0 0 0 0 1440.4852,1410.9261 L1440.4852,1357.8081 L1430.4852,1347.8081 L1088.505,1347.8081 A0,0 0 0 0 1088.505,1347.8081 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1430.4852,1347.8081 L1430.4852,1357.8081 L1440.4852,1357.8081 L1430.4852,1347.8081 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="287.7682" x="1094.505" y="1366.7051">Vertex buffers are incredibly useful, in essence,</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="330.9802" x="1094.505" y="1384.4111">you can read data from memory as vertex input to the</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="260.3902" x="1094.505" y="1402.1171">vertex shader rather than hardcoded data!</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="134.0848" x="934.4202" y="1361.195"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="114.0848" x="944.4202" y="1384.0231">createVertexBuffer()</text><path d="M1086.309,1420.9261 L1086.309,1457.3382 L1066.309,1461.3382 L1086.309,1465.3382 L1086.309,1501.7502 A0,0 0 0 0 1086.309,1501.7502 L1407.5443,1501.7502 A0,0 0 0 0 1407.5443,1501.7502 L1407.5443,1430.9261 L1397.5443,1420.9261 L1086.309,1420.9261 A0,0 0 0 0 1086.309,1420.9261 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1397.5443,1420.9261 L1397.5443,1430.9261 L1407.5443,1430.9261 L1397.5443,1420.9261 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="281.8142" x="1092.309" y="1439.8231">Index buffers are cool, basically, you can store</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="296.8553" x="1092.309" y="1457.5292">some vertices that would normally be duplicated</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="269.5682" x="1092.309" y="1475.2352">at corners to triangulate. this saves cycles at</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="183.9371" x="1092.309" y="1492.9412">scale, complex objects rejoice!</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="129.6928" x="936.6162" y="1443.1661"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="109.6928" x="946.6162" y="1465.9942">createIndexBuffer()</text><path d="M1093.7431,1511.7502 L1093.7431,1548.1622 L1073.7431,1552.1622 L1093.7431,1556.1622 L1093.7431,1592.5743 A0,0 0 0 0 1093.7431,1592.5743 L1455.7984,1592.5743 A0,0 0 0 0 1455.7984,1592.5743 L1455.7984,1521.7502 L1445.7984,1511.7502 L1093.7431,1511.7502 A0,0 0 0 0 1093.7431,1511.7502 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1445.7984,1511.7502 L1445.7984,1521.7502 L1455.7984,1521.7502 L1445.7984,1511.7502 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="341.0553" x="1099.7431" y="1530.6472">Map the buffer data to memory (The struct) as a pointer</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="337.1813" x="1099.7431" y="1548.3532">we can use this as a reference of where to write data to</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="204.9582" x="1099.7431" y="1566.0592">when the fence lets us write data.</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="24.791" x="1099.7431" y="1583.7653">(see</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="158.6651" x="1127.9141" y="1583.7653">recordCommandBuffer()</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="7.384" x="1286.5792" y="1583.7653">).</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="144.5609" x="929.1822" y="1533.9902"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="124.5609" x="939.1822" y="1556.8183">createUniformBuffer()</text><path d="M1094.6671,1602.5743 L1094.6671,1630.1333 L1074.6671,1634.1333 L1094.6671,1638.1333 L1094.6671,1665.6923 A0,0 0 0 0 1094.6671,1665.6923 L1474.2854,1665.6923 A0,0 0 0 0 1474.2854,1665.6923 L1474.2854,1612.5743 L1464.2854,1602.5743 L1094.6671,1602.5743 A0,0 0 0 0 1094.6671,1602.5743 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1464.2854,1602.5743 L1464.2854,1612.5743 L1474.2854,1612.5743 L1464.2854,1602.5743 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="358.6183" x="1100.6671" y="1621.4713">Here we create a pool to manage the memory and allocate</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="334.6592" x="1100.6671" y="1639.1773">space for the descriptor sets! Very useful and the same</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="238.3552" x="1100.6671" y="1656.8833">structure as command buffers &amp; pools.</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="146.4089" x="928.2582" y="1615.9612"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="126.4089" x="938.2582" y="1638.7893">createDescriptorPool()</text><path d="M1110.1472,1675.6923 L1110.1472,1729.8104 L1090.1472,1733.8104 L1110.1472,1737.8104 L1110.1472,1791.9284 A0,0 0 0 0 1110.1472,1791.9284 L1524.7225,1791.9284 A0,0 0 0 0 1524.7225,1791.9284 L1524.7225,1685.6923 L1514.7225,1675.6923 L1110.1472,1675.6923 A0,0 0 0 0 1110.1472,1675.6923 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1514.7225,1675.6923 L1514.7225,1685.6923 L1524.7225,1685.6923 L1514.7225,1675.6923 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="79.3261" x="1116.1472" y="1694.5893">Descriptor set</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" font-weight="bold" lengthAdjust="spacing" textLength="45.266" x="1198.8533" y="1694.5893">layouts</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="228.6702" x="1247.4993" y="1694.5893">specify the types of resources accessible</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="350.0384" x="1116.1472" y="1712.2953">by the graphical pipeline. A descriptor set is the actual buffer</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="329.9404" x="1116.1472" y="1730.0014">or resource that gets bound to descriptors and passed in.</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="390.7152" x="1116.1472" y="1747.7074">These differ from Vertex &amp; Index buffers, as they are not unique</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="390.1953" x="1116.1472" y="1765.4134">to the graphics pipeline. Specification of compute vs. graphics is</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="153.5171" x="1116.1472" y="1783.1194">therefore necessary. (see</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="145.3401" x="1273.0443" y="1783.1194">createDescriptorSets()</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="3.9" x="1418.3844" y="1783.1194">)</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="177.3691" x="912.7781" y="1715.6383"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="157.3691" x="922.7781" y="1738.4664">createDescriptorSetLayout()</text><path d="M1127.8533,1813.9284 L1127.8533,1841.4874 L1107.8533,1845.4874 L1127.8533,1849.4874 L1127.8533,1877.0465 A0,0 0 0 0 1127.8533,1877.0465 L1451.8316,1877.0465 A0,0 0 0 0 1451.8316,1877.0465 L1451.8316,1823.9284 L1441.8316,1813.9284 L1127.8533,1813.9284 A0,0 0 0 0 1127.8533,1813.9284 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1441.8316,1813.9284 L1441.8316,1823.9284 L1451.8316,1823.9284 L1441.8316,1813.9284 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="293.1763" x="1133.8533" y="1832.8254">This is the partner to the commandPool creator,</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="299.5983" x="1133.8533" y="1850.5314">storing the commands we wish to perform whilst</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="264.3422" x="1133.8533" y="1868.2375">waiting in a queue. These are very efficient.</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="212.7814" x="895.0719" y="1827.3154"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="192.7814" x="905.0719" y="1850.1435">Graphics::createCommandBuffer()</text><path d="M1129.2333,1887.0465 L1129.2333,1914.6055 L1109.2333,1918.6055 L1129.2333,1922.6055 L1129.2333,1950.1645 A0,0 0 0 0 1129.2333,1950.1645 L1492.4196,1950.1645 A0,0 0 0 0 1492.4196,1950.1645 L1492.4196,1897.0465 L1482.4196,1887.0465 L1129.2333,1887.0465 A0,0 0 0 0 1129.2333,1887.0465 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M1482.4196,1887.0465 L1482.4196,1897.0465 L1492.4196,1897.0465 L1482.4196,1887.0465 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="37.804" x="1135.2333" y="1905.9435">This is</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="55.1591" x="1176.4174" y="1905.9435">HEAVILY</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="202.9172" x="1234.9564" y="1905.9435">documented, create Semaphores</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="338.8062" x="1135.2333" y="1923.6495">and Fences, for halting and starting execution, basically</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="187.6422" x="1135.2333" y="1941.3555">a traffic controller for the GPU.</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="215.5414" x="893.6919" y="1900.4334"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="195.5414" x="903.6919" y="1923.2615">RenderPresent::createSyncObject()</text><line style="stroke:#E7E7E7;stroke-width:1.5;" x1="690.7627" x2="1007.8311" y1="1970.1645" y2="1970.1645"/><ellipse cx="1007.8311" cy="2001.1645" fill="none" rx="11" ry="11" style="stroke:#DDDDDD;stroke-width:1.0;"/><ellipse cx="1007.8311" cy="2001.1645" fill="#DDDDDD" rx="6" ry="6" style="stroke:#DDDDDD;stroke-width:1.0;"/><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="108.9806" x="1581.2507" y="985.2529"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="88.9806" x="1591.2507" y="1008.081">glfwPollEvents()</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="182.0371" x="1544.7225" y="1056.597"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="162.0371" x="1554.7225" y="1079.4251">RenderPresent::drawFrame()</text><rect fill="#313139" height="36.3441" style="stroke:#E7E7E7;stroke-width:0.5;" width="84.3324" x="1593.5748" y="900.9088"/><line style="stroke:#E7E7E7;stroke-width:0.5;" x1="1598.5748" x2="1598.5748" y1="900.9088" y2="937.2529"/><line style="stroke:#E7E7E7;stroke-width:0.5;" x1="1672.9073" x2="1672.9073" y1="900.9088" y2="937.2529"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" font-weight="bold" lengthAdjust="spacing" textLength="64.3324" x="1603.5748" y="923.7369">mainLoop()</text><polygon fill="#313139" points="1562.6521,1140.9412,1708.83,1140.9412,1720.83,1152.9412,1708.83,1164.9412,1562.6521,1164.9412,1550.6521,1152.9412,1562.6521,1140.9412" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="146.1779" x="1562.6521" y="1157.2091">!glfwWindowShouldClose(...)</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="133.2328" x="1569.1247" y="1199.9412"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="113.2328" x="1579.1247" y="1222.7692">vkDeviceWaitIdle(...)</text><ellipse cx="1635.7411" cy="1282.2853" fill="none" rx="11" ry="11" style="stroke:#DDDDDD;stroke-width:1.0;"/><ellipse cx="1635.7411" cy="1282.2853" fill="#DDDDDD" rx="6" ry="6" style="stroke:#DDDDDD;stroke-width:1.0;"/><path d="M1878.7882,1010.219 L1878.7882,1028.925 L1858.7882,1032.925 L1878.7882,1036.925 L1878.7882,1055.631 A0,0 0 0 0 1878.7882,1055.631 L2154.7835,1055.631 A0,0 0 0 0 2154.7835,1055.631 L2154.7835,1020.219 L2144.7835,1010.219 L1878.7882,1010.219 A0,0 0 0 0 1878.7882,1010.219 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><path d="M2144.7835,1010.219 L2144.7835,1020.219 L2154.7835,1020.219 L2144.7835,1010.219 " fill="#714137" style="stroke:#E7E7E7;stroke-width:0.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="244.9203" x="1884.7882" y="1029.116">This function initiates a series of shutdown</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" font-style="italic" lengthAdjust="spacing" textLength="251.5112" x="1884.7882" y="1046.822">destroy functions, safely stopping execution</text><text fill="#FFFFFF" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="3.484" x="2136.2995" y="1046.822">;</text><rect fill="#313139" height="36.3441" style="stroke:#E7E7E7;stroke-width:0.5;" width="72.9444" x="1785.8439" y="1014.7529"/><line style="stroke:#E7E7E7;stroke-width:0.5;" x1="1790.8439" x2="1790.8439" y1="1014.7529" y2="1051.097"/><line style="stroke:#E7E7E7;stroke-width:0.5;" x1="1853.7882" x2="1853.7882" y1="1014.7529" y2="1051.097"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" font-weight="bold" lengthAdjust="spacing" textLength="52.9444" x="1795.8439" y="1037.581">cleanup()</text><rect fill="#313139" height="36.3441" rx="12.5" ry="12.5" style="stroke:#E7E7E7;stroke-width:0.5;" width="139.1128" x="1752.7596" y="1090.631"/><text fill="#FFFFFF" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="119.1128" x="1762.7596" y="1113.4591">return EXIT_SUCCESS</text><ellipse cx="1822.316" cy="1172.9751" fill="none" rx="11" ry="11" style="stroke:#DDDDDD;stroke-width:1.0;"/><ellipse cx="1822.316" cy="1172.9751" fill="#DDDDDD" rx="6" ry="6" style="stroke:#DDDDDD;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1072.3917" x2="1072.3917" y1="87.412" y2="107.412"/><polygon fill="#E7E7E7" points="1068.3917,97.412,1072.3917,107.412,1076.3917,97.412,1072.3917,101.412" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="407.8729" x2="407.8729" y1="930.6939" y2="965.6939"/><polygon fill="#E7E7E7" points="403.8729,955.6939,407.8729,965.6939,411.8729,955.6939,407.8729,959.6939" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="407.8729" x2="407.8729" y1="1002.038" y2="1037.038"/><polygon fill="#E7E7E7" points="403.8729,1027.038,407.8729,1037.038,411.8729,1027.038,407.8729,1031.038" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="407.8729" x2="407.8729" y1="1073.3821" y2="1108.3821"/><polygon fill="#E7E7E7" points="403.8729,1098.3821,407.8729,1108.3821,411.8729,1098.3821,407.8729,1102.3821" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="407.8729" x2="407.8729" y1="1144.7262" y2="1193.1132"/><polygon fill="#E7E7E7" points="403.8729,1183.1132,407.8729,1193.1132,411.8729,1183.1132,407.8729,1187.1132" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="407.8729" x2="407.8729" y1="1229.4573" y2="1277.8443"/><polygon fill="#E7E7E7" points="403.8729,1267.8443,407.8729,1277.8443,411.8729,1267.8443,407.8729,1271.8443" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="690.7627" x2="690.7627" y1="971.5809" y2="1006.5809"/><polygon fill="#E7E7E7" points="686.7627,996.5809,690.7627,1006.5809,694.7627,996.5809,690.7627,1000.5809" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="690.7627" x2="690.7627" y1="1042.925" y2="1077.925"/><polygon fill="#E7E7E7" points="686.7627,1067.925,690.7627,1077.925,694.7627,1067.925,690.7627,1071.925" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="690.7627" x2="690.7627" y1="1130.6132" y2="1165.6132"/><polygon fill="#E7E7E7" points="686.7627,1155.6132,690.7627,1165.6132,694.7627,1155.6132,690.7627,1159.6132" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="690.7627" x2="690.7627" y1="1201.9573" y2="1236.9573"/><polygon fill="#E7E7E7" points="686.7627,1226.9573,690.7627,1236.9573,694.7627,1226.9573,690.7627,1230.9573" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="690.7627" x2="690.7627" y1="1273.3014" y2="1308.3014"/><polygon fill="#E7E7E7" points="686.7627,1298.3014,690.7627,1308.3014,694.7627,1298.3014,690.7627,1302.3014" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="690.7627" x2="690.7627" y1="915.2368" y2="935.2368"/><polygon fill="#E7E7E7" points="686.7627,925.2368,690.7627,935.2368,694.7627,925.2368,690.7627,929.2368" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="690.7627" x2="690.7627" y1="1344.6456" y2="1364.6456"/><polygon fill="#E7E7E7" points="686.7627,1354.6456,690.7627,1364.6456,694.7627,1354.6456,690.7627,1358.6456" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="690.7627" x2="690.7627" y1="878.7368" y2="913.7368"/><polygon fill="#E7E7E7" points="686.7627,903.7368,690.7627,913.7368,694.7627,903.7368,690.7627,907.7368" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="296.4444" y2="324.8313"/><polygon fill="#E7E7E7" points="997.4626,314.8313,1001.4626,324.8313,1005.4626,314.8313,1001.4626,318.8313" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="485.2144" y2="532.4544"/><polygon fill="#E7E7E7" points="997.4626,522.4544,1001.4626,532.4544,1005.4626,522.4544,1001.4626,526.4544" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="568.7985" y2="605.5725"/><polygon fill="#E7E7E7" points="997.4626,595.5725,1001.4626,605.5725,1005.4626,595.5725,1001.4626,599.5725" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="641.9166" y2="687.5435"/><polygon fill="#E7E7E7" points="997.4626,677.5435,1001.4626,687.5435,1005.4626,677.5435,1001.4626,681.5435" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="361.1755" y2="448.8703"/><polygon fill="#E7E7E7" points="997.4626,438.8703,1001.4626,448.8703,1005.4626,438.8703,1001.4626,442.8703" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="723.8876" y2="772.6616"/><polygon fill="#E7E7E7" points="997.4626,762.6616,1001.4626,772.6616,1005.4626,762.6616,1001.4626,766.6616" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="809.0057" y2="879.44"/><polygon fill="#E7E7E7" points="997.4626,869.44,1001.4626,879.44,1005.4626,869.44,1001.4626,873.44" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="1061.8231" y2="1114.744"/><polygon fill="#E7E7E7" points="997.4626,1104.744,1001.4626,1114.744,1005.4626,1104.744,1001.4626,1108.744" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="1151.0882" y2="1204.0091"/><polygon fill="#E7E7E7" points="997.4626,1194.0091,1001.4626,1204.0091,1005.4626,1194.0091,1001.4626,1198.0091" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="915.7841" y2="1025.479"/><polygon fill="#E7E7E7" points="997.4626,1015.479,1001.4626,1025.479,1005.4626,1015.479,1001.4626,1019.479" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="1397.5392" y2="1443.1661"/><polygon fill="#E7E7E7" points="997.4626,1433.1661,1001.4626,1443.1661,1005.4626,1433.1661,1001.4626,1437.1661" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="1479.5102" y2="1533.9902"/><polygon fill="#E7E7E7" points="997.4626,1523.9902,1001.4626,1533.9902,1005.4626,1523.9902,1001.4626,1527.9902" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="1570.3343" y2="1615.9612"/><polygon fill="#E7E7E7" points="997.4626,1605.9612,1001.4626,1615.9612,1005.4626,1605.9612,1001.4626,1609.9612" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="1652.3053" y2="1715.6383"/><polygon fill="#E7E7E7" points="997.4626,1705.6383,1001.4626,1715.6383,1005.4626,1705.6383,1001.4626,1709.6383" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="1240.3532" y2="1361.195"/><polygon fill="#E7E7E7" points="997.4626,1351.195,1001.4626,1361.195,1005.4626,1351.195,1001.4626,1355.195" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="1751.9824" y2="1827.3154"/><polygon fill="#E7E7E7" points="997.4626,1817.3154,1001.4626,1827.3154,1005.4626,1817.3154,1001.4626,1821.3154" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="1863.6595" y2="1900.4334"/><polygon fill="#E7E7E7" points="997.4626,1890.4334,1001.4626,1900.4334,1005.4626,1890.4334,1001.4626,1894.4334" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="690.7627" x2="690.7627" y1="241.6003" y2="842.3926"/><polygon fill="#E7E7E7" points="686.7627,832.3926,690.7627,842.3926,694.7627,832.3926,690.7627,836.3926" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="241.6003" y2="260.1003"/><polygon fill="#E7E7E7" points="997.4626,250.1003,1001.4626,260.1003,1005.4626,250.1003,1001.4626,254.1003" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="690.7627" x2="690.7627" y1="1366.1456" y2="1970.1645"/><polygon fill="#E7E7E7" points="686.7627,1960.1645,690.7627,1970.1645,694.7627,1960.1645,690.7627,1964.1645" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1001.4626" x2="1001.4626" y1="1936.7775" y2="1970.1645"/><polygon fill="#E7E7E7" points="997.4626,1960.1645,1001.4626,1970.1645,1005.4626,1960.1645,1001.4626,1964.1645" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1007.8311" x2="1007.8311" y1="220.1003" y2="240.1003"/><polygon fill="#E7E7E7" points="1003.8311,230.1003,1007.8311,240.1003,1011.8311,230.1003,1007.8311,234.1003" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1007.8311" x2="1007.8311" y1="1971.6645" y2="1990.1645"/><polygon fill="#E7E7E7" points="1003.8311,1980.1645,1007.8311,1990.1645,1011.8311,1980.1645,1007.8311,1984.1645" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1635.7411" x2="1635.7411" y1="1021.597" y2="1056.597"/><polygon fill="#E7E7E7" points="1631.7411,1046.597,1635.7411,1056.597,1639.7411,1046.597,1635.7411,1050.597" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1635.7411" x2="1635.7411" y1="937.2529" y2="985.2529"/><polygon fill="#E7E7E7" points="1631.7411,975.2529,1635.7411,985.2529,1639.7411,975.2529,1635.7411,979.2529" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1720.83" x2="1738.7596" y1="1152.9412" y2="1152.9412"/><polygon fill="#E7E7E7" points="1734.7596,1046.011,1738.7596,1036.011,1742.7596,1046.011,1738.7596,1042.011" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1738.7596" x2="1738.7596" y1="919.0809" y2="1152.9412"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1738.7596" x2="1677.9073" y1="919.0809" y2="919.0809"/><polygon fill="#E7E7E7" points="1687.9073,915.0809,1677.9073,919.0809,1687.9073,923.0809,1683.9073,919.0809" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1635.7411" x2="1635.7411" y1="1092.9412" y2="1140.9412"/><polygon fill="#E7E7E7" points="1631.7411,1130.9412,1635.7411,1140.9412,1639.7411,1130.9412,1635.7411,1134.9412" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1635.7411" x2="1635.7411" y1="1164.9412" y2="1199.9412"/><polygon fill="#E7E7E7" points="1631.7411,1189.9412,1635.7411,1199.9412,1639.7411,1189.9412,1635.7411,1193.9412" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1635.7411" x2="1635.7411" y1="1236.2853" y2="1271.2853"/><polygon fill="#E7E7E7" points="1631.7411,1261.2853,1635.7411,1271.2853,1639.7411,1261.2853,1635.7411,1265.2853" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1822.316" x2="1822.316" y1="1051.097" y2="1090.631"/><polygon fill="#E7E7E7" points="1818.316,1080.631,1822.316,1090.631,1826.316,1080.631,1822.316,1084.631" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1822.316" x2="1822.316" y1="1126.9751" y2="1161.9751"/><polygon fill="#E7E7E7" points="1818.316,1151.9751,1822.316,1161.9751,1826.316,1151.9751,1822.316,1155.9751" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="407.8729" x2="407.8729" y1="165.2561" y2="894.3498"/><polygon fill="#E7E7E7" points="403.8729,884.3498,407.8729,894.3498,411.8729,884.3498,407.8729,888.3498" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1007.8311" x2="1007.8311" y1="165.2561" y2="183.7561"/><polygon fill="#E7E7E7" points="1003.8311,173.7561,1007.8311,183.7561,1011.8311,173.7561,1007.8311,177.7561" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1635.7411" x2="1635.7411" y1="165.2561" y2="900.9088"/><polygon fill="#E7E7E7" points="1631.7411,890.9088,1635.7411,900.9088,1639.7411,890.9088,1635.7411,894.9088" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1822.316" x2="1822.316" y1="165.2561" y2="1014.7529"/><polygon fill="#E7E7E7" points="1818.316,1004.7529,1822.316,1014.7529,1826.316,1004.7529,1822.316,1008.7529" style="stroke:#E7E7E7;stroke-width:1.0;"/><line style="stroke:#E7E7E7;stroke-width:1.0;" x1="1072.3917" x2="1072.3917" y1="143.7561" y2="163.7561"/><polygon fill="#E7E7E7" points="1068.3917,153.7561,1072.3917,163.7561,1076.3917,153.7561,1072.3917,157.7561" style="stroke:#E7E7E7;stroke-width:1.0;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" font-style="italic" font-weight="bold" lengthAdjust="spacing" textLength="364.0126" x="899.8855" y="2027.1304">Main execution from the run function in the entrypoint</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" font-style="italic" font-weight="bold" lengthAdjust="spacing" textLength="375.5206" x="892.3114" y="2046.1984">This dictates basic flow of the vulkan boilerplate system.</text><!--SRC=[ZLXTZzks4dtVNy7jGxenNFdTQGiaphOraE0khhFRswSBMXfPp4gaBadPSOl-ztjcIFbZrviq2B2MD1pEnvapGqOJMr8VjR7gzWkLGpJENfMwvx_gIgdPR3AHhpH-LRLtdOeDAJ_WOR2bl8K8loCR_RvtniR9P3RB2Zur9gZAb5572cgjWobLtRgTShKisWxjexPgxKnBlcyXfS8-HEeA9Lh8Ljcagwjv1slUNCrPBmouUSqIRzIFF_RUbLGDddx- -IhqhOb9nbWJVpUsShlBelDDM- -M4Bfv3QqxaLG_ANwxy0HJykAYA21W7MnhgOxYMH9GUP6sbUBTZ6xDdwGgglNGHXKeHcCt8Vd12jAUAyfstGVoTnmnyaztIHc0f8HfWE0FK6iiLQfFAyOG9XikxF6BrnsjXxeclu9P2zssQrq-Njv94eN_MfLPJaMdF0Np9rnujXSlsP78YlTm5KlNphMyBFg1fchNcB9HaDfGp4jOrCCcqrQYB-nqhyg6KRPhoCh2uiIL45sVKghq1bB7n3u8SBw9WLBojBGXQblILyNVmwxDV5usL3xUMxtLfjNhbXwGqqep0Z_eFVaWO9bC7XxVzbXNofUbhTraedJVyw-__XQGIaZI6mK5UggIpMeBBLWqdStKrMnsQpV8wlXIWccHjwdyYboZiFZPZelib-nR7Xvaw-DZqJyn4l1-bMrwS_0urQ0y03L3VtDKCCq5Qd80uJjnjYLYPtd9kW8haDyVAGIo6o3xuN6C_wiHTzvicZXNiXtA1UAg6-MdglS0kCICmLGw6roRONrQcAl1rnf9FS6pw0NI1Cq7WceGoXRqavQfbH2CMgA8DbwFTAU7w3eyCQJtIfVUXQ2OaMhdEw4kb1v44tZ9RertjWFf5LZy4_u9mDynmx66AV2TAmf9NOVeTJ8cLrAsvUa-2VjAmDzhZ_ppckyca_UqDIKj74ZMjPF9T-elx3VlJVbur-nbpoIHew7KMJoKkhL3HvuvApRU3Pj6_Nft_tqOoLja4lCAyCh6kK3C1gxh4HKK0fodGkIoj-nlNbuF4RMKVGwD6zg32lxyxdRrYT6Urc3ZAPkdFWyXqLjjF7v1FvvqvA0TjoqAuOv3LE1rmkS7j_cssra866CfTXVCoQW1bSNcw7gVWvW59GQ9RuFwtq03XOishC1V2wQlb_Pd0IKI088N8gyOr0cIAh6pSZkByczCdumnjlOQY1bAZcgXtX5Jy8WHL9nr0K254ZWKGrh44HjBFPoWJ_LmcCg8DguXaLCe1I8a64Jijzkt3yiFVwZAbGE3cghYeiFBJc_emT0klEJnIIFXRZ0MuHHXD94H5GoR8R8LXTARVgmBmyf3mi3EeBEiYS6qirntI5K2AGmXUwsMe9usW5e96UqaKRDPmys9uwjByOppArfFdVdxYkdqLwzxDAWmcSopR_-61Fgn3k55If6WeQllinTJn9zxNr3WiSDcQest5VK061EBJRskTAtpnq_NwemhK0J8BHnF_81rbG71ekLKEIxJmvxh0JNIzSw3LEFraJ3WrJi1r8bJxtE8dGVPeeEvGSQTeslg6LscXPp1gANkwt7a2DBSkMz37rLif92q90mb1NEcYL6uXC6O79wTi05IAKeOoL22fGZa3q0WABZhu6JdAchL5j2IYE7BPqhsR7KxiFlyckE9hjYXOMflsBpY1S8yvZTpPN9hV7rdUcg1cdy2OuxwbsDynDsD4wGcAYLqxttcq4ZzoF5U0ANwlDKuA2LOZiCX0ZVMWl620aKQSnChkiOGd2iJRVvRjNaoxtszEfzbkZvPAHRmM7U0SoOOSPivJFXGM0n9FQ1qgYG89xYyPEF2THt2S0TgUCd4B2AjAKzCl2itZ7GImTv3O1mT_O2zsSe_t01Ut5AQNaldK_6vFYXWNo3AdvWKcKjblf3zqlAHaDSCFc2kXw51uJkNDIlgg7DmKtYS8vMZLfmJp1aI3pLv1iG7yf6-f6ytJ-AGR4aIumuI16Enk49R50lgePLoaycffAciOYzBn0oRLAayvTIMxKR7s2QrnlP3pFKi2_Fxq6W6BKQ51d-GT9wVV5MYF9E-oubT0kelU2FQvVkPBzmUfkb8c4Xmj5p89HMJwsGoZjAx4yq8crZcIfxJ6853wdkKKmWXfDsER0MMi9k1JvP57a-03h3JlkIHKETO1zW0PXrhFUSVGVpiiFTbb- -jOGnznUcFEdM5ZAfneisvkFaaJCfj_ZKdHeyqAslbT6KvpSbi4V04FPnhfXYScBpWVEUviuxQqsevJN5N4UbMMbGuaKnZm4qW0iUaGic5D_epcRo-p3F7bY9bVCdntzWozY0TaxNKaRZ-h9Auz91AnnbCgUXvFEFQOgdgi9bGvpLNnGZ-GsiDeA-HVlFKnF4QAtj4tQjKpj_owgnHFdDjDdj_PXB2rueq2XosKsdglHWLzpq0XZpX4Eq6pmXEKmbFjJBJih9r4jwajeG1TEmMXNhxn7bkHooBWyG0mUJLGH5aneroX-AShzrWXQgFgaBghnXpUBImHTO0C0QcSq6gK4RcdrVdjJlboCAC_O6L1slG4bAFSAVUX1DdLXAPF9zoLBZKmELg6ugZl3dq6W084C06n27JVb-COBsGhY1eFQVW-TZfv-UjvrYk5sQW766cRyliv_BaTcXQ2T4EXzGh9KGbyynH9iWSP49pscHsZMc3RBBJHYOWaBPEVRJ8WUTWIWEb6b4oSguy3dPvD4M2yM5qQBMtvR-4g6vU6bOlZm_JiIvNr25627F8S-elp1P8CLTVerknLQQMo0qD3uUxm1FcpaEPrsmv7zVvYDeoYd8Duy1tuip91SBJsnrFFUnISdF3btqVdEiltzcWRFawu0uRtMxXL4Yr-ZHGbTSx6OluSzREsI1rSythyqM275WNBOwhCfGmakRRntIo_1qfM-AibiULopTIw2NQ3Y_OUfQPVDDsSddAruPft0xaJQACq0mHXjbyRORYHKptXrLy5j0r8VHiJd-M6BujEjm4ugmoUAjk_xFyzD_L_M9nkrfb5uvP-3y0]--></g></svg>