1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 6<meta charset="utf-8"> 7<meta name="viewport" content="width=device-width, initial-scale=1"> 8<meta name="Author" content="Michalis Kamburelis and Castle Game Engine Developers"> 9 10<link rel="canonical" href="https://castle-engine.io/features"> 11<meta property="og:url" content="https://castle-engine.io/features"> 12<meta name="Description" content="Discover Castle Game Engine features: cross-platform support, visual editor, powerful API, 3D and 2D rendering, physics, sound, and more. Build games for all platforms!"> 13<meta property="og:description" content="Discover Castle Game Engine features: cross-platform support, visual editor, powerful API, 3D and 2D rendering, physics, sound, and more. Build games for all platforms!"> 14<meta name="twitter:description" content="Discover Castle Game Engine features: cross-platform support, visual editor, powerful API, 3D and 2D rendering, physics, sound, and more. Build games for all platforms!"> 15<meta property="og:image" content="https://castle-engine.io/images/original_size/terrain_component_1.png"> 16<meta name="twitter:image" content="https://castle-engine.io/images/original_size/terrain_component_1.png"> 17<link rel="Start" href="/" type="text/html" title="Castle Game Engine"> 18 <title>Castle Game Engine Features - Cross-Platform 3D & 2D Game Development</title> 19 20 <meta property="og:title" content="Castle Game Engine Features - Cross-Platform 3D & 2D Game Development" > 21 <meta name="twitter:title" content="Castle Game Engine Features - Cross-Platform 3D & 2D Game Development" > 22 23 <meta property="fb:admins" content="100000327755900" > 24 25 <!-- Twitter Card data --> 26 <meta name="twitter:card" content="summary"> 27 <meta name="twitter:site" content="castleengine"> 28 29 <meta property="og:type" content="website" > 30 31 32<!-- Bootstrap --> 33<link href="https://castle-engine.io/castle-engine-website-base/node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> 34 35<!-- Bootstrap icons, https://icons.getbootstrap.com/ --> 36<link href="https://castle-engine.io/castle-engine-website-base/node_modules/bootstrap-icons/font/bootstrap-icons.min.css" rel="stylesheet"> 37 38<!-- Colorbox --> 39<link href="https://castle-engine.io/castle-engine-website-base/node_modules/jquery-colorbox/example3/colorbox.css" type="text/css" rel="stylesheet"> 40 41<!-- slick carousel https://github.com/kenwheeler/slick/ --> 42<link rel="stylesheet" type="text/css" href="https://castle-engine.io/castle-engine-website-base/node_modules/slick-carousel/slick/slick.css"> 43<link rel="stylesheet" type="text/css" href="https://castle-engine.io/castle-engine-website-base/node_modules/slick-carousel/slick/slick-theme.css"> 44 45<!-- Preload main slideshow image for better LCP on main page --> 46 47 <link rel="alternate" type="application/rss+xml" 48 title="Castle Game Engine - News Feed" 49 href="https://castle-engine.io/news_feed.php"> 50 51 <!-- 52 Add Inter font, https://developers.google.com/fonts/docs/getting_started . 53 Add &display=swap to render text ASAP, see https://web.dev/font-display/?utm_source=lighthouse&utm_medium=lr 54 --> 55 <!--link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter&display=swap"--> 56 57 <link type="text/css" rel="stylesheet" media="all" href="https://castle-engine.io/castle-engine-website-base/castle-engine.css?version=58"> 58 <link type="text/css" rel="stylesheet" media="all" href="https://castle-engine.io/castle-engine-website-base/castle-asciidoctor.css?version=58"> 59 <style> 60/** 61 * GeSHi Dynamically Generated Stylesheet 62 * -------------------------------------- 63 * Dynamically generated stylesheet for delphi 64 * CSS class: , CSS id: 65 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2014 Benny Baumann 66 * (http://qbnz.com/highlighter/ and http://geshi.org/) 67 * -------------------------------------- 68 */ 69.delphi .de1, .delphi .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;} 70.delphi {font-family:monospace;} 71.delphi .imp {font-weight: bold; color: red;} 72.delphi li, .delphi .li1 {font-weight: normal; vertical-align:top;} 73.delphi .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;} 74.delphi .li2 {font-weight: bold; vertical-align:top;} 75.delphi .kw1 {color: #000000; font-weight: bold;} 76.delphi .kw2 {color: #000000; font-weight: bold;} 77.delphi .kw3 {color: #000066;} 78.delphi .kw4 {color: #000066; font-weight: bold;} 79.delphi .co1 {color: #808080; font-style: italic;} 80.delphi .co2 {color: #008000; font-style: italic;} 81.delphi .coMULTI {color: #808080; font-style: italic;} 82.delphi .es0 {color: #ff0000; font-weight: bold;} 83.delphi .br0 {color: #000066;} 84.delphi .sy0 {color: #000066;} 85.delphi .sy1 {color: #000066;} 86.delphi .sy2 {color: #000066;} 87.delphi .sy3 {color: #000066;} 88.delphi .st0 {color: #ff0000;} 89.delphi .nu0 {color: #0000ff;} 90.delphi .me1 {color: #006600;} 91.delphi .re0 {color: #0000cc;} 92.delphi .re1 {color: #ff0000;} 93.delphi .ln-xtra, .delphi li.ln-xtra, .delphi div.ln-xtra {background-color: #ffc;} 94.delphi span.xtra { display:block; } 95/** 96 * GeSHi Dynamically Generated Stylesheet 97 * -------------------------------------- 98 * Dynamically generated stylesheet for vrmlx3d 99 * CSS class: , CSS id: 100 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2014 Benny Baumann 101 * (http://qbnz.com/highlighter/ and http://geshi.org/) 102 * -------------------------------------- 103 */ 104.vrmlx3d .de1, .vrmlx3d .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;} 105.vrmlx3d {font-family:monospace;} 106.vrmlx3d .imp {font-weight: bold; color: red;} 107.vrmlx3d li, .vrmlx3d .li1 {font-weight: normal; vertical-align:top;} 108.vrmlx3d .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;} 109.vrmlx3d .li2 {font-weight: bold; vertical-align:top;} 110.vrmlx3d .kw1 {color: #000000; font-weight: bold;} 111.vrmlx3d .kw2 {color: #c20cb9; font-weight: bold;} 112.vrmlx3d .kw3 {color: #7a0874; font-weight: bold;} 113.vrmlx3d .co0 {color: #666666; font-style: italic;} 114.vrmlx3d .co1 {color: #800000;} 115.vrmlx3d .co2 {color: #cc0000; font-style: italic;} 116.vrmlx3d .co3 {color: #000000; font-weight: bold;} 117.vrmlx3d .co4 {color: #666666;} 118.vrmlx3d .es1 {color: #000099; font-weight: bold;} 119.vrmlx3d .es2 {color: #007800;} 120.vrmlx3d .es3 {color: #007800;} 121.vrmlx3d .es4 {color: #007800;} 122.vrmlx3d .es5 {color: #780078;} 123.vrmlx3d .es_h {color: #000099; font-weight: bold;} 124.vrmlx3d .br0 {color: #7a0874; font-weight: bold;} 125.vrmlx3d .sy0 {color: #000000; font-weight: bold;} 126.vrmlx3d .st0 {color: #ff0000;} 127.vrmlx3d .st_h {color: #ff0000;} 128.vrmlx3d .nu0 {color: #000000;} 129.vrmlx3d .re0 {color: #007800;} 130.vrmlx3d .re1 {color: #007800;} 131.vrmlx3d .re2 {color: #007800;} 132.vrmlx3d .re4 {color: #007800;} 133.vrmlx3d .re5 {color: #660033;} 134.vrmlx3d .ln-xtra, .vrmlx3d li.ln-xtra, .vrmlx3d div.ln-xtra {background-color: #ffc;} 135.vrmlx3d span.xtra { display:block; } 136/** 137 * GeSHi Dynamically Generated Stylesheet 138 * -------------------------------------- 139 * Dynamically generated stylesheet for c 140 * CSS class: , CSS id: 141 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2014 Benny Baumann 142 * (http://qbnz.com/highlighter/ and http://geshi.org/) 143 * -------------------------------------- 144 */ 145.c .de1, .c .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;} 146.c {font-family:monospace;} 147.c .imp {font-weight: bold; color: red;} 148.c li, .c .li1 {font-weight: normal; vertical-align:top;} 149.c .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;} 150.c .li2 {font-weight: bold; vertical-align:top;} 151.c .kw1 {color: #b1b100;} 152.c .kw2 {color: #000000; font-weight: bold;} 153.c .kw3 {color: #000066;}
154.c .kw4 {color: #993333;} 155.c .co1 {color: #666666; font-style: italic;} 156.c .co2 {color: #339933;} 157.c .coMULTI {color: #808080; font-style: italic;} 158.c .es0 {color: #000099; font-weight: bold;} 159.c .es1 {color: #000099; font-weight: bold;} 160.c .es2 {color: #660099; font-weight: bold;} 161.c .es3 {color: #660099; font-weight: bold;} 162.c .es4 {color: #660099; font-weight: bold;} 163.c .es5 {color: #006699; font-weight: bold;} 164.c .br0 {color: #009900;} 165.c .sy0 {color: #339933;} 166.c .st0 {color: #ff0000;} 167.c .nu0 {color: #0000dd;} 168.c .nu6 {color: #208080;} 169.c .nu8 {color: #208080;} 170.c .nu12 {color: #208080;} 171.c .nu16 {color:#800080;} 172.c .nu17 {color:#800080;} 173.c .nu18 {color:#800080;} 174.c .nu19 {color:#800080;} 175.c .me1 {color: #202020;} 176.c .me2 {color: #202020;} 177.c .ln-xtra, .c li.ln-xtra, .c div.ln-xtra {background-color: #ffc;} 178.c span.xtra { display:block; } 179/** 180 * GeSHi Dynamically Generated Stylesheet 181 * -------------------------------------- 182 * Dynamically generated stylesheet for xml 183 * CSS class: , CSS id: 184 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2014 Benny Baumann 185 * (http://qbnz.com/highlighter/ and http://geshi.org/) 186 * -------------------------------------- 187 */ 188.xml .de1, .xml .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;} 189.xml {font-family:monospace;} 190.xml .imp {font-weight: bold; color: red;} 191.xml li, .xml .li1 {font-weight: normal; vertical-align:top;} 192.xml .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;} 193.xml .li2 {font-weight: bold; vertical-align:top;} 194.xml .es0 {color: #000099; font-weight: bold;} 195.xml .br0 {color: #66cc66;} 196.xml .sy0 {color: #66cc66;} 197.xml .st0 {color: #ff0000;} 198.xml .nu0 {color: #cc66cc;} 199.xml .sc-1 {color: #808080; font-style: italic;} 200.xml .sc0 {color: #00bbdd;} 201.xml .sc1 {color: #ddbb00;} 202.xml .sc2 {color: #339933;} 203.xml .sc3 {color: #009900;} 204.xml .re0 {color: #000066;} 205.xml .re1 {color: #000000; font-weight: bold;} 206.xml .re2 {color: #000000; font-weight: bold;} 207.xml .ln-xtra, .xml li.ln-xtra, .xml div.ln-xtra {background-color: #ffc;} 208.xml span.xtra { display:block; } 209</style> 210 <link rel="icon" href="https://castle-engine.io/images/castle_game_engine_icon_fit_in_square.png" sizes="256x256"> 211 <link rel="apple-touch-icon-precomposed" href="https://castle-engine.io/images/castle_game_engine_icon_fit_in_square.png"> 212 <meta name="msapplication-TileImage" content="https://castle-engine.io/images/castle_game_engine_icon_fit_in_square.png"> 213
213<script type="application/ld+json"> 214 { 215 "@context": "https://schema.org", 216 "@type": "SoftwareApplication", 217 "name": "Castle Game Engine", 218 "applicationCategory": "GameEngine", 219 "operatingSystem": "Windows, Linux, macOS, Android, iOS, Nintendo Switch, Web", 220 "author": { 221 "@type": "Organization", 222 "name": "Castle Game Engine Developers", 223 "url": "https://castle-engine.io/", 224 "logo": "https://castle-engine.io/images/castle_game_engine_icon.png" 225 }, 226 "description": "Free open-source 3D and 2D game engine. Cross-platform, for desktops, mobile, console, web. Comfortable visual editor. Powerful modern Object Pascal API.", 227 "url": "https://castle-engine.io/", 228 "image": "https://castle-engine.io/images/combined_cge_logo_game.png", 229 "sameAs": [ 230 "https://github.com/castle-engine/castle-engine" 231 ] 232 } 233 </script>
233 234 235</head> 236 237<body > 238 239 240 <nav class="navbar navbar-expand-lg bg-body-tertiary " data-bs-theme="dark"> 241 <div class="container-fluid"> 242 <a class="navbar-brand" href="/"> 243 <img alt="Castle Game Engine Logo" class="d-inline-block" src="https://castle-engine.io/images/castle_game_engine_icon.svg" width="30" height="30" > 244 <!-- Hide it on large screens, as it takes too much space when it is adjacent to expanded navbar --> 245 <span class="d-lg-none">Castle Game Engine</span> 246 </a> 247 <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> 248 <span class="navbar-toggler-icon"></span> 249 </button> 250 251 <div class="collapse navbar-collapse" id="navbarSupportedContent"> 252 <ul class="navbar-nav me-auto mb-2 mb-lg-0"><li class="nav-item "><a href="https://castle-engine.io/download" class="nav-link">Download</a></li><li class="nav-item "><a href="https://castle-engine.io/features" class="nav-link active" aria-current="page">Features</a></li><li class="nav-item "><a href="https://castle-engine.io/wp/" class="nav-link">News</a></li><li class="nav-item dropdown"><a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">Documentation</a><ul class="dropdown-menu"><li><a class="dropdown-item" href="https://castle-engine.io/bad_chess">Tutorial: 3D physics fun</a></li><li><a class="dropdown-item" href="https://castle-engine.io/manual">Manual</a></li><li><a class="dropdown-item" href="https://castle-engine.io/creating_data_intro.php">Creating Game Data</a></li><li><a class="dropdown-item" href="https://castle-engine.io/apidoc/html/index.html">API Reference</a></li><li><a class="dropdown-item" href="https://castle-engine.io/why_pascal">Why Pascal?</a></li><li><a class="dropdown-item" href="https://castle-engine.io/modern_pascal">Modern Object Pascal Introduction</a></li><li><a class="dropdown-item" href="https://castle-engine.io/castle_game_engine_for_unity_developers">Overview for Unity Developers</a></li><li><a class="dropdown-item" href="https://castle-engine.io/x3d">Scene Graph: X3D nodes</a></li><li><a class="dropdown-item" href="https://castle-engine.io/conferences">Conferences</a></li></ul></li><li class="nav-item "><a href="https://www.youtube.com/c/CastleGameEngine" class="nav-link">Videos</a></li><li class="nav-item "><a href="https://castle-engine.io/castle-model-viewer" class="nav-link" title="Viewer for glTF, X3D, Collada, sprite sheets and other 3D and 2D model formats">Model Viewer</a></li><li class="nav-item "><a href="https://castle-engine.io/talk.php" class="nav-link" title="Ask for help, report bugs, discuss features">Community</a></li><li class="nav-item dropdown"><a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">Gallery</a><ul class="dropdown-menu"><li><a class="dropdown-item" href="https://castle-engine.io/gallery_games.php">Games</a></li><li><a class="dropdown-item" href="https://castle-engine.io/gallery_tools.php">Tools</a></li><li><a class="dropdown-item" href="https://castle-engine.io/additional_components.php">Additional Components</a></li><li><a class="dropdown-item" href="https://castle-engine.io/assets.php">Assets (3D and 2D Graphics, Sound)</a></li></ul></li><li class="nav-item "><a href="https://castle-engine.io/credits" class="nav-link" title="Credits"><i class="bi bi-suit-heart-fill"></i></a></li><li class="nav-item d-none"><a href="https://castle-engine.io/release" class="nav-link">Release notes</a></li></ul> 253 <form class="container-fluid justify-content-start d-flex castle-donate-button-form"> 254 <a href="https://patreon.com/castleengine" class="btn btn-primary btn-success">Donate</a> 255 256 <a href="https://calendar.proton.me/bookings#IFp0_KuiKOQDieI7o4imzSQaYVPbmjaG2eL3ihaGop0=" class="btn btn-secondary" style="margin-left: 0.5em;">Book a Meeting</a> 257 </form><form action="https://duckduckgo.com/" method="get" role="search" class="castle-navbar-search"> 258 <div class="input-group flex-nowrap"> 259 <input type="text" class="form-control" name="q" placeholder="Search..." style="min-width: 8em"> 260 <input type="hidden" name="sites" value="castle-engine.io"> 261 <input type="hidden" name="kae" value="d"> 262 <span class="input-group-btn"> 263 <button type="submit" class="btn"> 264 <i class="bi bi-search"></i> 265 </button> 266 </span> 267 </div><!-- /input-group --> 268</form> 269 </div> 270 </div> 271 </nav><div class="container-fluid"><h1>Features</h1><div class="castle-document"><div id="toc" class="toc"> 272<div id="toctitle">Table of Contents</div> 273<ul class="sectlevel1"> 274<li><a href="#_presentation">1. Presentation</a></li> 275<li><a href="#_summary">2. Summary</a></li> 276<li><a href="#_cross_platform">3. Cross-platform</a></li> 277<li><a href="#_visual_editor">4. Visual editor</a></li> 278<li><a href="#_viewport_with_scenes_camera_navigation_and_other_components">5. Viewport with scenes, camera, navigation and other components</a></li> 279<li><a href="#_data_formats">6. Data formats</a> 280<ul class="sectlevel2"> 281<li><a href="#_gltf">6.1. glTF</a></li> 282<li><a href="#_x3d">6.2. X3D</a></li> 283<li><a href="#_sprite_sheets">6.3. Sprite sheets</a></li> 284<li><a href="#_spine">6.4. Spine</a></li> 285</ul> 286</li> 287<li><a href="#_graphic_effects">7. Graphic effects</a></li> 288<li><a href="#_images">8. Images</a></li> 289<li><a href="#_user_interface_components">9. User interface components</a> 290<ul class="sectlevel2"> 291<li><a href="#_text_and_fonts">9.1. Text and fonts</a></li> 292</ul> 293</li> 294<li><a href="#_networking">10. Networking</a></li> 295<li><a href="#_optimization_and_profiling">11. Optimization and profiling</a></li> 296<li><a href="#_sound">12. Sound</a></li> 297<li><a href="#_physics">13. Physics</a></li> 298<li><a href="#_tiled_integration">14. Tiled integration</a></li> 299<li><a href="#_data_and_systems">15. Data and Systems</a></li> 300<li><a href="#_particles">16. Particles</a></li> 301<li><a href="#_native_and_fast_code_using_modern_pascal">17. Native and fast code using modern Pascal</a></li> 302<li><a href="#_build_tool_and_continuous_integration">18. Build tool and continuous integration</a></li> 303<li><a href="#_free_open_source_software">19. Free open-source software</a></li> 304</ul> 305</div> 306<div id="preamble"> 307<div class="sectionbody"> 308<div class="admonitionblock note"> 309<table> 310<tr> 311<td class="icon"> 312<div class="title">Note</div> 313</td> 314<td class="content"> 315Not enough? Want more features? :) See our <a href="roadmap" class="bare">roadmap</a> and <a href="https://www.patreon.com/castleengine">support us on Patreon</a> to make it happen! 316</td> 317</tr> 318</table> 319</div> 320</div> 321</div> 322<div class="sect1"> 323<h2 id="_presentation">1. Presentation</h2> 324<div class="sectionbody"> 325<div class="paragraph"> 326<iframe src="https://docs.google.com/presentation/d/e/2PACX-1vRuG3TaWgS7S-AAj7tPzHF1MYpgKueE1Z-L6df03WTuYU0Y0K0GLxxbC54gUBygI0gxp4r11pQtCal5/embed?start=false&loop=false&delayms=60000" frameborder="0" width="960" height="569" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe> 327</div> 328</div> 329</div> 330<div class="sect1"> 331<h2 id="_summary">2. Summary</h2> 332<div class="sectionbody"> 333<div class="paragraph"> 334<div class="feature-row feature-row-odd"> 335 <div class="feature-column-image"> 336 <a href="features#_visual_editor" 337 title="3D game in editor"> 338 <img 339 class="feature-image" 340 alt="3D game in editor" 341 src="images/feature_size/impressive_castle_editor.webp" 342 width="750" height="421" 343 > 344 </a> 345 </div> 346 <div class="feature-column-text"> 347 <h3 class="feature-title"><a href="features#_visual_editor">Visual editor</a></h3> 348 <div class="feature-description">Design 3D and 2D games and user interfaces (with automatic scaling, anchors). Build and deploy the same project for multiple platforms. Integrate with various IDEs (<a href="vscode">Visual Studio Code</a>, <a href="lazarus">Lazarus</a>, <a href="delphi">Delphi</a>...).</div> 349 </div> 350 </div><div class="feature-row feature-row-even"> 351 <div class="feature-column-image"> 352 <a href="features#_viewport_with_scenes_camera_navigation_and_other_components" 353 title="Terrain with water and trees"> 354 <img 355 class="feature-image" 356 alt="Terrain with water and trees" 357 src="images/feature_size/terrain_component_1.webp" 358 width="750" height="426" 359 > 360 </a> 361 </div> 362 <div class="feature-column-text"> 363 <h3 class="feature-title"><a href="features#_viewport_with_scenes_camera_navigation_and_other_components">Components</a></h3> 364 <div class="feature-description">A lot of components to design <a href="viewport_and_scenes">
364viewport</a> contents (3D and 2D world, using scenes, cameras, navigation, primitives, lights...) and <a href="user_interface">user interface</a> (buttons, images, labels...).</div> 365 </div> 366 </div><div class="feature-row feature-row-odd"> 367 <div class="feature-column-image"> 368 <a href="features#_data_formats" 369 title="Village scene with outlines in glTF from Sketchfab ( https://sketchfab.com/3d-models/ftm-0970f30574d047b1976ba0aa6f2ef855 by Luis Fernandez )"> 370 <img 371 class="feature-image" 372 alt="Village scene with outlines in glTF from Sketchfab ( https://sketchfab.com/3d-models/ftm-0970f30574d047b1976ba0aa6f2ef855 by Luis Fernandez )" 373 src="images/feature_size/gltf_village_outlines.webp" 374 width="750" height="398" 375 > 376 </a> 377 </div> 378 <div class="feature-column-text"> 379 <h3 class="feature-title"><a href="features#_data_formats">Lots of ways to define data</a></h3> 380 <div class="feature-description">Use 3D models, 2D animations, sprite sheets. Great integration with authoring tools like <a href="blender">Blender</a> or shops like <a href="sketchfab">Sketchfab</a> thanks to using open standards like <a href="gltf">glTF</a> and X3D.</div> 381 </div> 382 </div><div class="feature-row feature-row-even"> 383 <div class="feature-column-image"> 384 <a href="features#_graphic_effects" 385 title="Real-time water with caustics, reflections, shadows"> 386 <img 387 class="feature-image" 388 alt="Real-time water with caustics, reflections, shadows" 389 src="images/feature_size/barna29_nice_shadows.webp" 390 width="750" height="472" 391 > 392 </a> 393 </div> 394 <div class="feature-column-text"> 395 <h3 class="feature-title"><a href="features#_graphic_effects">Graphic effects</a></h3> 396 <div class="feature-description">Composable shader effects, shadows, mirrors, physically based rendering, bump mapping, gamma correction...</div> 397 </div> 398 </div><div class="feature-row feature-row-odd"> 399 <div class="feature-column-image"> 400 <a href="features#_cross_platform" 401 title=""Escape from the Universe" on Nintendo Switch"> 402 <img 403 class="feature-image" 404 alt=""Escape from the Universe" on Nintendo Switch" 405 src="images/feature_size/nintendo_switch_3.webp" 406 width="750" height="422" 407 > 408 </a> 409 </div> 410 <div class="feature-column-text"> 411 <h3 class="feature-title"><a href="features#_cross_platform">Cross-platform</a></h3> 412 <div class="feature-description">Target any platform (desktop: Windows, Linux, macOS, FreeBSD, Raspberry Pi, mobile: Android, iOS, console: Nintendo Switch, web). Work on any desktop platform. VR is coming as a next target soon.</div> 413 </div> 414 </div><div class="feature-row feature-row-even"> 415 <div class="feature-column-image"> 416 <a href="features#_native_and_fast_code_using_modern_pascal" 417 title="FPC and Delphi"> 418 <img 419 class="feature-image" 420 alt="FPC and Delphi" 421 src="images/feature_size/combined_fpc_delphi.webp" 422 width="750" height="426" 423 > 424 </a> 425 </div> 426 <div class="feature-column-text"> 427 <h3 class="feature-title"><a href="features#_native_and_fast_code_using_modern_pascal">Clean and fast code</a></h3> 428 <div class="feature-description">Native clean object-oriented programming language with <a href="modern_pascal">modern Object Pascal</a>. Fast builds, fast execution out-of-the-box.</div> 429 </div> 430 </div><div class="feature-row feature-row-odd"> 431 <div class="feature-column-image"> 432 <a href="features#_build_tool_and_continuous_integration" 433 title="Open-source, Jenkins, Docker, Codeberg, Woodpecker CI, GitHub Actions, GitLab CI"> 434 <img 435 class="feature-image" 436 alt="Open-source, Jenkins, Docker, Codeberg, Woodpecker CI, GitHub Actions, GitLab CI" 437 src="images/feature_size/combined_osi_ci_logos_2.webp" 438 width="750" height="375" 439 > 440 </a> 441 </div> 442 <div class="feature-column-text"> 443 <h3 class="feature-title"><a href="features#_build_tool_and_continuous_integration">Open source and friendly to continuous integration</a></h3> 444 <div class="feature-description">Tooling friendly to continuous integration. <a href="build_tool">Command-line build tool</a> and <a href="docker">Docker</a> image. Ready files and documentation how to use with <a href="github_actions">GitHub Actions</a>, <a href="gitlab_ci">GitLab CI</a>, <a href="jenkins">Jenkins</a>, <a href="woodpecker">Woodpecker CI</a> or any <a href="ci">other CI</a>. Engine is completely open-source and <a href="license">can be used to make any (including proprietary) applications</a>.</div> 445 </div> 446 </div><div class="clearfix"></div> 447</div> 448</div> 449</div> 450<div class="sect1"> 451<h2 id="_cross_platform">3. Cross-platform</h2> 452<div class="sectionbody"> 453<div class="paragraph"> 454<p>Truly cross-platform, you can work on (almost) any platform and compile to any platform.</p> 455</div> 456<div class="ulist"> 457<ul> 458<li> 459<p>Desktop (Linux, Windows, <a href="macos">macOS</a>, FreeBSD). Just <a href="install" class="bare">install</a>
459 the engine, compiler (like FPC) and run the application.</p> 460<div class="paragraph"> 461<div class="thumbnails thumbnails-align-left"> 462 <a href="https://castle-engine.io/images/original_size/impressive_castle_editor.png" 463 class="screenshot" 464 title="3D game in editor"><img 465 style="float: right" 466 src="https://castle-engine.io/images/thumb_const_height_size/impressive_castle_editor.webp" 467 width="357" height="200" 468 alt="3D game in editor" 469 ></a> 470 <a href="https://castle-engine.io/images/original_size/fps_game_2.png" 471 class="screenshot" 472 title="3D game running"><img 473 style="float: right" 474 src="https://castle-engine.io/images/thumb_const_height_size/fps_game_2.webp" 475 width="336" height="200" 476 alt="3D game running" 477 ></a></div> 478</div> 479<div class="paragraph"> 480<div class="thumbnails thumbnails-align-left"> 481 <a href="https://castle-engine.io/images/original_size/2d_demo_editor.png" 482 class="screenshot" 483 title="2D game in editor"><img 484 style="float: right" 485 src="https://castle-engine.io/images/thumb_const_height_size/2d_demo_editor.webp" 486 width="352" height="200" 487 alt="2D game in editor" 488 ></a> 489 <a href="https://castle-engine.io/images/original_size/2d_demo_game.png" 490 class="screenshot" 491 title="2D game running"><img 492 style="float: right" 493 src="https://castle-engine.io/images/thumb_const_height_size/2d_demo_game.webp" 494 width="339" height="200" 495 alt="2D game running" 496 ></a></div> 497</div> 498</li> 499<li> 500<p>Mobile (<a href="android">Android</a>, <a href="ios">iOS</a>) with numerous <a href="android_services">Android services</a> and <a href="ios_services">iOS services</a> to integrate with platform-specific features.</p> 501<div class="paragraph"> 502<div class="thumbnails thumbnails-align-left"> 503 <a href="https://castle-engine.io/images/original_size/iphone_dragon_squash.jpg" 504 class="screenshot" 505 title=""Dragon Squash" on iOS (iPhone)"><img 506 style="float: right" 507 src="https://castle-engine.io/images/thumb_const_height_size/iphone_dragon_squash.webp" 508 width="267" height="200" 509 alt=""Dragon Squash" on iOS (iPhone)" 510 ></a> 511 <a href="https://castle-engine.io/images/original_size/iphone_escape.jpg" 512 class="screenshot" 513 title=""Escape from the Universe" on iOS (iPhone)"><img 514 style="float: right" 515 src="https://castle-engine.io/images/thumb_const_height_size/iphone_escape.webp" 516 width="150" height="200" 517 alt=""Escape from the Universe" on iOS (iPhone)" 518 ></a></div> 519</div> 520</li> 521<li> 522<p><a href="web">Web</a>. Using the FPC <em>WebAssembly</em> target and <em>WebGL</em> for rendering. You can distribute your application by just including it as part of your webpage. Any modern web browser, desktop or mobile, supports it.</p> 523<div class="paragraph"> 524<div class="thumbnails thumbnails-align-left"> 525 <a href="https://castle-engine.io/images/original_size/web_0_play_animation.png" 526 class="screenshot" 527 title="Web demo - Play animation"><img 528 style="float: right" 529 src="https://castle-engine.io/images/thumb_const_height_size/web_0_play_animation.webp" 530 width="309" height="200" 531 alt="Web demo - Play animation" 532 ></a> 533 <a href="https://castle-engine.io/images/original_size/web_1_space_shooter.png" 534 class="screenshot" 535 title="Web demo - Space shooter"><img 536 style="float: right" 537 src="https://castle-engine.io/images/thumb_const_height_size/web_1_space_shooter.webp" 538 width="309" height="200" 539 alt="Web demo - Space shooter" 540 ></a> 541 <a href="https://castle-engine.io/images/original_size/web_5_platformer.png" 542 class="screenshot" 543 title="Web demo - Platformer"><img 544 style="float: right" 545 src="https://castle-engine.io/images/thumb_const_height_size/web_5_platformer.webp" 546 width="356" height="200" 547 alt="Web demo - Platformer" 548 ></a> 549 <a href="https://castle-engine.io/images/original_size/web_7_tiled.png" 550 class="screenshot" 551 title="Web demo - Strategy Game Using Tiled"><img 552 style="float: right" 553 src="https://castle-engine.io/images/thumb_const_height_size/web_7_tiled.webp" 554 width="309" height="200" 555 alt="Web demo - Strategy Game Using Tiled" 556 ></a></div> 557</div> 558</li> 559<li> 560<p>Console (<a href="nintendo_switch">Nintendo Switch</a>).</p> 561<div class="paragraph"> 562<div class="thumbnails thumbnails-align-left"> 563 <a href="https://castle-engine.io/images/original_size/nintendo_switch_3.jpg" 564 class="screenshot" 565 title=""Escape from the Universe" on Nintendo Switch"><img 566 style="float: right" 567 src="https://castle-engine.io/images/thumb_const_height_size/nintendo_switch_3.webp" 568 width="356" height="200" 569 alt=""Escape from the Universe" on Nintendo Switch" 570 ></a></div> 571</div> 572</li> 573<li> 574<p><a href="https://www.raspberrypi.com/">Raspberry Pi</a> and <a href="https://pine64.org/">Pine64</a> devices (it’s just a Linux on <em>Arm</em> (32-bit) or <em>Aarch64</em> (64-bit) CPU).</p> 575<div class="paragraph"> 576<div class="thumbnails thumbnails-align-left"> 577 <a href="https://castle-engine.io/images/original_size/raspberry_pi_1.webp" 578 class="screenshot" 579 title="Raspberry Pi"><img 580 style="float: right" 581 src="https://castle-engine.io/images/thumb_const_height_size/raspberry_pi_1.webp" 582 width="150" height="200" 583 alt="Raspberry Pi" 584 ></a> 585 <a href="https://castle-engine.io/images/original_size/unholy_raspberry_1.webp" 586 class="screenshot" 587 title=""The Unholy Society" on Raspberry Pi"><img 588 style="float: right" 589 src="https://castle-engine.io/images/thumb_const_height_size/u
589nholy_raspberry_1.webp" 590 width="356" height="200" 591 alt=""The Unholy Society" on Raspberry Pi" 592 ></a></div> 593</div> 594</li> 595<li> 596<p>Coming soon (<a href="roadmap" class="bare">roadmap</a>):</p> 597<div class="openblock"> 598<div class="content"> 599<div class="ulist"> 600<ul> 601<li> 602<p><a href="https://castle-engine.io/wp/2022/01/16/oculus-quest-2-developer-mode-for-castle-game-engine-enabled/">Oculus (VR)</a> (we have the hardware to test)</p> 603</li> 604<li> 605<p>XBox (we have the hardware — even devkit, though <em>"developer mode"</em> can also be activated on a retail version of Xbox).</p> 606</li> 607</ul> 608</div> 609</div> 610</div> 611</li> 612<li> 613<p>The engine code is portable and in principle "just works" on any operating system and CPU supported by FPC or Delphi.</p> 614</li> 615</ul> 616</div> 617</div> 618</div> 619<div class="sect1"> 620<h2 id="_visual_editor">4. Visual editor</h2> 621<div class="sectionbody"> 622<div class="paragraph"> 623<p><a href="editor">Editor</a> to visually design your game 3D and 2D world and user interface around it.</p> 624</div> 625<div class="ulist"> 626<ul> 627<li> 628<p>With templates for new projects — empty, 3D, 2D. They showcase nicely engine possibilities and were designed as a good starting point for your applications.</p> 629<div class="paragraph"> 630<div class="thumbnails thumbnails-align-left"> 631 <a href="https://castle-engine.io/images/original_size/editor_new_project.png" 632 class="screenshot" 633 title="New project templates in CGE editor"><img 634 style="float: right" 635 src="https://castle-engine.io/images/thumb_const_height_size/editor_new_project.webp" 636 width="269" height="200" 637 alt="New project templates in CGE editor" 638 ></a></div> 639</div> 640</li> 641<li> 642<p>Allows to easily build the project for all platforms.</p> 643<div class="paragraph"> 644<div class="thumbnails thumbnails-align-left"> 645 <a href="https://castle-engine.io/images/original_size/editor_platforms.png" 646 class="screenshot" 647 title="Choose target platform"><img 648 style="float: right" 649 src="https://castle-engine.io/images/thumb_const_height_size/editor_platforms.webp" 650 width="252" height="200" 651 alt="Choose target platform" 652 ></a> 653 <a href="https://castle-engine.io/images/original_size/editor_formats.png" 654 class="screenshot" 655 title="Choose package format"><img 656 style="float: right" 657 src="https://castle-engine.io/images/thumb_const_height_size/editor_formats.webp" 658 width="220" height="200" 659 alt="Choose package format" 660 ></a></div> 661</div> 662</li> 663<li> 664<p>With file browser, with preview for data (3D models, images, sound files).</p> 665</li> 666<li> 667<p>With easy way to execute code editor (<a href="vscode">Visual Studio Code</a>, <a href="lazarus">Lazarus</a>, <a href="delphi">Delphi</a> or anything else you like) to edit your code.</p> 668<div class="paragraph"> 669<div class="thumbnails thumbnails-align-left"> 670 <a href="https://castle-engine.io/images/original_size/code_editor_lazarus.png" 671 class="screenshot" 672 title="Lazarus to edit Pascal code"><img 673 style="float: right" 674 src="https://castle-engine.io/images/thumb_const_height_size/code_editor_lazarus.webp" 675 width="352" height="200" 676 alt="Lazarus to edit Pascal code" 677 ></a> 678 <a href="https://castle-engine.io/images/original_size/code_editor_vscode.png" 679 class="screenshot" 680 title="Visual Studio Code to edit Pascal code"><img 681 style="float: right" 682 src="https://castle-engine.io/images/thumb_const_height_size/code_editor_vscode.webp" 683 width="352" height="200" 684 alt="Visual Studio Code to edit Pascal code" 685 ></a></div> 686</div> 687</li> 688<li> 689<p>Designs are (de)serialized to JSON. Any component can be (de)serialized, along with it published properties.</p> 690</li> 691<li> 692<p>Designs can refer to each other using <code><a href="https://castle-engine.io/apidoc/html/CastleTransform.TCastleTransformDesign.html">TCastleTransformDesign</a></code> or <code><a href="https://castle-engine.io/apidoc/html/CastleControls.TCastleDesign.html">TCastleDesign</a></code>, to use them like <em>prefabs</em> from other engines. See <a href="reuse_design">components to reuse a design in other designs</a>.</p> 693</li> 694<li> 695<p>You can define <a href="custom_components">custom project-specific components available in the editor</a>.</p> 696</li> 697</ul> 698</div> 699</div> 700</div> 701<div class="sect1"> 702<h2 id="_viewport_with_scenes_camera_navigation_and_other_components">5. Viewport with scenes, camera, navigation and other components</h2> 703<div class="sectionbody"> 704<div class="paragraph"> 705<p><a href="viewport_and_scenes">Viewport with scenes, camera, navigation</a> allows to define 3D and 2D worlds.</p> 706</div> 707<div class="ulist"> 708<ul> 709<li> 710<p>Flexible hierarchy of transformations and scenes that you can design in the editor or control from Pascal co
710de using a powerful OOP API.</p> 711<div class="paragraph"> 712<div class="thumbnails thumbnails-align-left"> 713 <a href="https://castle-engine.io/images/original_size/viewport_3d_nice_view.png" 714 class="screenshot" 715 title="Viewport with 3D design"><img 716 style="float: right" 717 src="https://castle-engine.io/images/thumb_const_height_size/viewport_3d_nice_view.webp" 718 width="342" height="200" 719 alt="Viewport with 3D design" 720 ></a></div> 721</div> 722</li> 723<li> 724<p>Powerful <code><a href="https://castle-engine.io/apidoc/html/CastleScene.TCastleScene.html">TCastleScene</a></code> to load and render <a href="model_formats">a lot of model formats, like glTF, X3D, sprite sheets</a>.</p> 725</li> 726<li> 727<p>Other visible objects like <code><a href="https://castle-engine.io/apidoc/html/CastleScene.TCastleBox.html">TCastleBox</a></code>, <code><a href="https://castle-engine.io/apidoc/html/CastleScene.TCastleSphere.html">TCastleSphere</a></code>, <code><a href="https://castle-engine.io/apidoc/html/CastleScene.TCastleText.html">TCastleText</a></code>, <code><a href="https://castle-engine.io/apidoc/html/CastleScene.TCastleImageTransform.html">TCastleImageTransform</a></code>. Great also for quick prototyping 3D and 2D worlds.</p> 728</li> 729<li> 730<p>Flexible <a href="camera">camera</a> support, with multiple camera possible, attaching children to camera and placing camera as child of other objects, like bones.</p> 731</li> 732<li> 733<p>Easy <a href="navigation">navigation</a> components if you want to allow user to navigate in 3D or 2D worlds in a standard fashion. These include typical 2D and 3D navigation methods (like <code><a href="https://castle-engine.io/apidoc/html/CastleCameras.TCastleWalkNavigation.html">TCastleWalkNavigation</a></code>, <code><a href="https://castle-engine.io/apidoc/html/CastleCameras.TCastleExamineNavigation.html">TCastleExamineNavigation</a></code>, <code><a href="https://castle-engine.io/apidoc/html/CastleCameras.TCastle2DNavigation.html">TCastle2DNavigation</a></code>) as well as 3rd-person navigation with avatar (<code><a href="https://castle-engine.io/apidoc/html/CastleThirdPersonNavigation.TCastleThirdPersonNavigation.html">TCastleThirdPersonNavigation</a></code>).</p> 734</li> 735<li> 736<p>Each transformation can be enhanced with behaviors (descendants of <code><a href="https://castle-engine.io/apidoc/html/CastleTransform.TCastleBehavior.html">TCastleBehavior</a></code>), like <code><a href="https://castle-engine.io/apidoc/html/CastleBehaviors.TCastleBillboard.html">TCastleBillboard</a></code>, <code><a href="https://castle-engine.io/apidoc/html/CastleBehaviors.TCastleSoundSource.html">TCastleSoundSource</a></code>. It is easy and encouraged to create behaviors required for your specific game, see <a href="behaviors">Behaviors in the manual</a>.</p> 737</li> 738<li> 739<p><code><a href="https://castle-engine.io/apidoc/html/CastleTransform.TCastleTransformReference.html">TCastleTransformReference</a></code> to <a href="viewport_3d#_multiple_instances_of_the_same_scene_using_tcastletransformreference">efficiently reference the same transformation multiple times</a>. Great e.g. to instantiate thousands of trees.</p> 740</li> 741<li> 742<p>Lights using components <code><a href="https://castle-engine.io/apidoc/html/CastleScene.TCastlePointLight.html">TCastlePointLight</a></code>, <code><a href="https://castle-engine.io/apidoc/html/CastleScene.TCastleDirectionalLight.html">TCastleDirectionalLight</a></code>, <code><a href="https://castle-engine.io/apidoc/html/CastleScene.TCastleSpotLight.html">TCastleSpotLight</a></code>. See <a href="viewport_3d#_lighting">lighting in manual</a>.</p> 743<div class="paragraph"> 744<div class="thumbnails thumbnails-align-left"> 745 <a href="https://castle-engine.io/images/original_size/editor_lights.png" 746 class="screenshot" 747 title="Lights in Castle Game Engine editor"><img 748 style="float: right" 749 src="https://castle-engine.io/images/thumb_const_height_size/editor_lights.webp" 750 width="352" height="200" 751 alt="Lights in Castle Game Engine editor" 752 ></a></div> 753</div> 754</li> 755<li> 756<p>Components to visualize terrains (<code><a href="https://castle-engine.io/apidoc/html/CastleTerrain.TCastleTerrain.html">TCastleTerrain</a></code>), and generate terrain data from smooth noise (<code><a href="https://castle-engine.io/apidoc/html/CastleTerrain.TCastleTerrainNoise.html">TCastleTerrainNoise</a></code>) or image (<code><a href="https://castle-engine.io/apidoc/html/CastleTerrain.TCastleTerrainImage.html">TCastleTerrainImage</a></code>) or a combination of them (<code><a href="https://castle-engine.io/apidoc/html/CastleTerrain.TCastleTerrainCombine.html">TCastleTerrainCombine</a></code>). See the <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/terrain">examples/terrain</a>.</p> 757<div class="paragraph"> 758<div class="thumbnails thumbnails-align-left"> 759 <a href="https://castle-engine.io/images/original_size/terrain_component_1.png" 760 class="screenshot" 761 title="Terrain with water and trees"><img 762 style="float: right" 763 src="https://castle-engine.io/images/thumb_const_height_size/terrain_component_1.webp" 764 width="352" height="200" 765 alt="Terrain with water and trees" 766 ></a> 767 <a href="https://castle-engine.io/images/original_size/terrain_component_2_size.png" 768 class="screenshot" 769 title="Terrain larger with fog"><img 770 style="float: right" 771 src="https://castle-engine.io/images/thumb_const_height_size/terrain_component_2_size.webp" 772 width="352" height="200" 773 alt="Terrain larger with fog" 774 ></a> 775 <a href="https://castle-engine.io/images/original_size/terrain_component_image.png" 776 class="screenshot" 777 title="Terrain with data from image"><img 778 style="float: right" 779 src="https://castle-engine.io/images/thumb_const_height_size/terrain_component_image.webp" 780 width="352" height="200" 781 alt="Terrain with data from image" 782 ></a> 783 <a href="https://castle-engine.io/images/original_size/terrain_component_water.png" 784 class="screenshot" 785 title="Water reflecting terrain"><img 786 style="float: right" 787 src="https://castle-engine.io/images/thumb_const_height_size/terrain_component_water.webp" 788 width="352" height="200" 789 alt="Water reflecting terrain" 790 ></a> 791 <a href="https://castle-engine.io/images/original_size/terrain_component_wireframe.png" 792 class="screenshot" 793 title="Wireframe terrain with water rectangle"><img 794 style="float: right" 795 src="https://castle-engine.io/images/thumb_const_height_size/terrain_component_wireframe.webp" 796 width="352" height="200" 797 alt="Wireframe terrain with water rectangle" 798 ></a></div> 799</div> 800</li> 801<li> 802<p>Our <code><a href="https://castle-engine.io/apidoc/html/CastleViewport.TCastleViewport.html">
802TCastleViewport</a></code> is a 2D user interface control that you can naturally use multiple times, to observe the same or different 3D / 2D worlds from different cameras at the same time.</p> 803<div class="paragraph"> 804<div class="thumbnails thumbnails-align-left"> 805 <a href="https://castle-engine.io/images/original_size/mountains_of_fire_screen_1.png" 806 class="screenshot" 807 title="Mountains Of Fire - split-screen coop game"><img 808 style="float: right" 809 src="https://castle-engine.io/images/thumb_const_height_size/mountains_of_fire_screen_1.webp" 810 width="250" height="200" 811 alt="Mountains Of Fire - split-screen coop game" 812 ></a> 813 <a href="https://castle-engine.io/images/original_size/view3dscene_viewports.png" 814 class="screenshot" 815 title="Multiple viewports with a DOOM level in Castle Model Viewer"><img 816 style="float: right" 817 src="https://castle-engine.io/images/thumb_const_height_size/view3dscene_viewports.webp" 818 width="352" height="200" 819 alt="Multiple viewports with a DOOM level in Castle Model Viewer" 820 ></a></div> 821</div> 822</li> 823</ul> 824</div> 825</div> 826</div> 827<div class="sect1"> 828<h2 id="_data_formats">6. Data formats</h2> 829<div class="sectionbody"> 830<div class="paragraph"> 831<p>You can <a href="model_formats">use various formats to define 3D and 2D data</a>.</p> 832</div> 833<div class="sect2"> 834<h3 id="_gltf">6.1. glTF</h3> 835<div class="paragraph"> 836<p>We support standard model format from Khronos: <a href="gltf">glTF</a>.</p> 837</div> 838<div class="paragraph"> 839<div class="thumbnails thumbnails-align-left"> 840 <a href="https://castle-engine.io/images/original_size/gltf_village_outlines.png" 841 class="screenshot" 842 title="Village scene with outlines from Sketchfab, <a href="https://sketchfab.com/3d-models/ftm-0970f30574d047b1976ba0aa6f2ef855" class="bare">https://sketchfab.com/3d-models/ftm-0970f30574d047b1976ba0aa6f2ef855</a> by Luis Fernandez, <a href="https://sketchfab.com/luyssport" class="bare">https://sketchfab.com/luyssport</a>"><img 843 style="float: right" 844 src="https://castle-engine.io/images/thumb_const_height_size/gltf_village_outlines.webp" 845 width="377" height="200" 846 alt="Village scene with outlines from Sketchfab, <a href="https://sketchfab.com/3d-models/ftm-0970f30574d047b1976ba0aa6f2ef855" class="bare">https://sketchfab.com/3d-models/ftm-0970f30574d047b1976ba0aa6f2ef855</a> by Luis Fernandez, <a href="https://sketchfab.com/luyssport" class="bare">https://sketchfab.com/luyssport</a>" 847 ></a> 848 <a href="https://castle-engine.io/images/original_size/gltf_helmet.png" 849 class="screenshot" 850 title="Helmet from glTF (sample from Khronos)"><img 851 style="float: right" 852 src="https://castle-engine.io/images/thumb_const_height_size/gltf_helmet.webp" 853 width="377" height="200" 854 alt="Helmet from glTF (sample from Khronos)" 855 ></a> 856 <a href="https://castle-engine.io/images/original_size/sketchfab_invincible.png" 857 class="screenshot" 858 title="Invincible - Mark Grayson (3D model rendered using Castle Game Engine), <a href="https://sketchfab.com/3d-models/invincible-mark-grayson-698c1106da924ab1a26392247e697f79" class="bare">https://sketchfab.com/3d-models/invincible-mark-grayson-698c1106da924ab1a26392247e697f79</a> , by ASideOfChidori"><img 859 style="float: right" 860 src="https://castle-engine.io/images/thumb_const_height_size/sketchfab_invincible.webp" 861 width="352" height="200" 862 alt="Invincible - Mark Grayson (3D model rendered using Castle Game Engine), <a href="https://sketchfab.com/3d-models/invincible-mark-grayson-698c1106da924ab1a26392247e697f79" class="bare">https://sketchfab.com/3d-models/invincible-mark-grayson-698c1106da924ab1a26392247e697f79</a> , by ASideOfChidori" 863 ></a> 864 <a href="https://castle-engine.io/images/original_size/sketchfab_cars.png" 865 class="screenshot" 866 title="Cars 3D models from Sketchfab, <a href="https://sketchfab.com/3d-models/pony-cartoon-885d9f60b3a9429bb4077cfac5653cf9" class="bare">https://sketchfab.com/3d-models/pony-cartoon-885d9f60b3a9429bb4077cfac5653cf9</a> Pony Cartoon by Slava Z., <a href="https://sketchfab.com/3d-models/free-1975-porsche-911-930-turbo-8568d9d14a994b9cae59499f0dbed21e" class="bare">https://sketchfab.com/3d-models/free-1975-porsche-911-930-turbo-8568d9d14a994b9cae59499f0dbed21e</a> 1975 Porsche 911 (930) Turbo by Karol Miklas"><img 867 style="float: right" 868 src="https://castle-engine.io/images/thumb_const_height_size/sketchfab_cars.webp" 869 width="343" height="200" 870 alt="Cars 3D models from Sketchfab, <a href="https://sketchfab.com/3d-models/pony-cartoon-885d9f60b3a9429bb4077cfac5653cf9" class="bare">https://sketchfab.com/3d-models/pony-cartoon-885d9f60b3a9429bb4077cfac5653cf9</a> Pony Cartoon by Slava Z., <a href="https://sketchfab.com/3d-models/free-1975-porsche-911-930-turbo-8568d9d14a994b9cae59499f0dbed21e" class="bare">https://sketchfab.com/3d-models/free-1975-porsche-911-930-turbo-8568d9d14a994b9cae59499f0dbed21e</a> 1975 Porsche 911 (930) Turbo by Karol Miklas" 871 ></a></div> 872</div> 873<div class="ulist"> 874<ul> 875<li> 876<p>Great integration with <a href="blender">Blender</a>
876 that can export to glTF.</p> 877</li> 878<li> 879<p>Lots of glTF models on the Internet, e.g. on <a href="https://sketchfab.com/features/gltf">Sketchfab</a>.</p> 880</li> 881<li> 882<p>Skinned animation.</p> 883</li> 884<li> 885<p><em>Physically Based Rendering</em>.</p> 886</li> 887<li> 888<p>Metadata support (which can come e.g. from <a href="blender">Blender</a> custom properties).</p> 889</li> 890</ul> 891</div> 892</div> 893<div class="sect2"> 894<h3 id="_x3d">6.2. X3D</h3> 895<div class="paragraph"> 896<p>We support standard model format from Web3D: <a href="x3d">X3D and VRML</a>.</p> 897</div> 898<div class="ulist"> 899<ul> 900<li> 901<p>Support for X3D 4.0 with <em>Physically Based Rendering</em> and lots of possibilities for shapes, textures, animations etc.</p> 902</li> 903<li> 904<p>The <code><a href="https://castle-engine.io/apidoc/html/CastleScene.TCastleScene.html">TCastleScene</a></code> is a set of X3D nodes. We implement <a href="x3d">extended set of X3D nodes</a>.</p> 905</li> 906<li> 907<p>You can build and process scene graph of X3D nodes. Procedural generation of models, any pre/post-processing of models is possible.</p> 908</li> 909<li> 910<p>We can save the X3D graph back to file, in X3D or STL format, see <code><a href="https://castle-engine.io/apidoc/html/CastleSceneCore.TCastleSceneCore.html#Save-String-">TCastleSceneCore.Save</a></code>, <code><a href="https://castle-engine.io/apidoc/html/X3DLoad.html#SaveNode-TX3DRootNode-String-TCastleSceneSaveOptions-">SaveNode</a></code>.</p> 911</li> 912<li> 913<p>You can write model conversion utilities. Our <a href="castle-model-viewer">Castle Model Viewer</a> allows to convert various models to X3D and STL. Conversion to <a href="gltf">glTF</a> is coming.</p> 914</li> 915</ul> 916</div> 917</div> 918<div class="sect2"> 919<h3 id="_sprite_sheets">6.3. Sprite sheets</h3> 920<div class="paragraph"> 921<p>We support <a href="sprite_sheets">sprite sheets</a>.</p> 922</div> 923<div class="ulist"> 924<ul> 925<li> 926<p>In <em>Castle Game Engine</em> (<code>.castle-sprite-sheet</code>), Starling and Cocos2D formats.</p> 927</li> 928<li> 929<p>Own <em>sprite sheet editor</em> to visually create sprite sheets from texture atlases.</p> 930<div class="paragraph"> 931<div class="thumbnails thumbnails-align-left"> 932 <a href="https://castle-engine.io/images/original_size/sprite_sheet_editor.png" 933 class="screenshot" 934 title="Sprite Sheet Editor"><img 935 style="float: right" 936 src="https://castle-engine.io/images/thumb_const_height_size/sprite_sheet_editor.webp" 937 width="341" height="200" 938 alt="Sprite Sheet Editor" 939 ></a></div> 940</div> 941</li> 942<li> 943<p>See the <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/">platformer</a> example - complete platformer game using sprite sheets. Also <a href="https://castle-engine.itch.io/platformer">released on itch.io</a>.</p> 944<div class="paragraph"> 945<div class="thumbnails thumbnails-align-left"> 946 <a href="https://castle-engine.io/images/original_size/platformer.png" 947 class="screenshot" 948 title="Platformer demo"><img 949 style="float: right" 950 src="https://castle-engine.io/images/thumb_const_height_size/platformer.webp" 951 width="341" height="200" 952 alt="Platformer demo" 953 ></a></div> 954</div> 955</li> 956</ul> 957</div> 958</div> 959<div class="sect2"> 960<h3 id="_spine">6.4. Spine</h3> 961<div class="paragraph"> 962<p>We support <a href="spine">Spine</a> skeletal 2D animations.</p> 963</div> 964<div class="paragraph"> 965<div class="thumbnails thumbnails-align-left"> 966 <a href="https://castle-engine.io/images/original_size/dragon_spine.png" 967 class="screenshot" 968 title="Dragon in Spine"><img 969 style="float: right" 970 src="https://castle-engine.io/images/thumb_const_height_size/dragon_spine.webp" 971 width="303" height="200" 972 alt="Dragon in Spine" 973 ></a> 974 <a href="https://castle-engine.io/images/original_size/dragon_0.png" 975 class="screenshot" 976 title="Same dragon rendered by Castle Game Engine"><img 977 style="float: right" 978 src="https://castle-engine.io/images/thumb_const_height_size/dragon_0.webp" 979 width="320" height="200" 980 alt="Same dragon rendered by Castle Game Engine" 981 ></a></div> 982</div> 983<div class="ulist"> 984<ul> 985<li> 986<p>We have own Spine importer in <em>Castle Game Engine</em> that reads Spine JSON (not relying on any official <em>Spine runtime</em>).</p> 987</li> 988<li> 989<p>Spine animations and rendering features are converted to standard engine animation nodes (same nodes as used by glTF and X3D) so they play consistently within the engine, with animation cross-fading etc.</p> 990</li> 991<li> 992<p>Spine skins are supported.</p> 993</li> 994<li> 995<p>Loading Spine JSON files from various Spine versions, up to and including Spine 4, is supported.</p> 996</li> 997<li> 998<p>Spine texture atlases with all advanced options (e.g. stripping whitespace, rotating) are supported.</p> 999</li> 1000<li> 1001<p>Alternative: <a href="https://github.com/Kagamma/spine-runtimes/">Spine runtime for Castle Game Engine</a> is an alternative approach to load and render Spine models. It supports some additional features by "offloading" some work to the Spine C runtime.</p> 1002</li> 1003</ul> 1004</div> 1005</div> 1006</div> 1007</div> 1008<div class="sect1"> 1009<h2 id="_graphic_effects">7. Graphic effects</h2> 1010<div class="sectionbody"> 1011<div class="ulist"> 1012<ul> 1013<li> 1014<p><a href="shaders">Shader effects</a> to define effects using GLSL that enhance existing engine rendering. See many examples in <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/shaders/">examples/shaders/</a> subdirectory. You can write own effects easily using <em>OpenGL Shading Language</em>.</p> 1015<div class="paragraph"> 1016<div class="thumbnails thumbnails-align-left"> 1017 <a href="https://castle-engine.io/images/original_size/volumetric_animated_fog_all.png" 1018 class="screenshot" 1019 title="Volumetric fog"><img 1020 style="float: right" 1021 src="https://castle-engine.io/images/thumb_const_height_size/volumetric_animated_fog_all.webp" 1022 width="320" height="200" 1023 alt="Volumetric fog" 1024 ></a> 1025 <a href="https://castle-engine.io/images/original_size/barna29_nice_shadows.png" 1026 class="screenshot" 1027 title="Real-time water with caustics, reflections, shadows"><img 1028 style="float: right" 1029 src="https://castle-engine.io/images/thumb_const_height_size/barna29_nice_shadows.webp" 1030 width="318" height="200" 1031 alt="Real-time water with caustics, reflections, shadows" 1032 ></a></div> 1033</div> 1034</li> 1035<li> 1036<p><a href="bump_mapping">Bump mapping (normal maps)</a> using basic, parallax, steep parallax with self-shadowing algorithms.</p> 1037<div class="paragraph"> 1038<div class="thumbnails thumbnails-align-left"> 1039 <a href="https://castle-engine.io/images/original_size/editor_bump_mapping_none.png" 1040 class="screenshot" 1041 title="Box in editor (without bump mapping)"><img 1042 style="float: right" 1043 src="https://castle-engine.io/images/thumb_const_height_size/editor_bump_mapping_none.webp" 1044 width="353" height="200" 1045 alt="Box in editor (without bump mapping)" 1046 ></a> 1047 <a href="https://castle-engine.io/images/original_size/editor_bump_mapping_parallax.png" 1048 class="screenshot" 1049 title="Box in editor (with parallax bump mapping)"><img 1050 style="float: right" 1051 src="https://castle-engine.io/images/thumb_const_height_size/editor_bump_mapping_parallax.webp" 1052 width="353" height="200" 1053 alt="Box in editor (with parallax bump mapping)" 1054 ></a> 1055 <a href="https://castle-engine.io/images/original_size/bump_demo_leaf_nobump.png" 1056 class="screenshot" 1057 title="Leaf (without bump mapping)"><img 1058 style="float: right" 1059 src="https://castle-engine.io/images/thumb_const_height_size/bump_demo_leaf_nobump.webp" 1060 width="267" height="200" 1061 alt="Leaf (without bump mapping)" 1062 ></a> 1063 <a href="https://castle-engine.io/images/original_size/bump_demo_leaf.png" 1064 class="screenshot" 1065 title="Leaf (with bump mapping)"><img 1066 style="float: right" 1067 src="https://castle-engine.io/images/thumb_const_height_size/bump_demo_leaf.webp" 1068 width="267" height="200" 1069 alt="Leaf (with bump mapping)" 1070 ></a></div> 1071</div> 1072</li> 1073<li> 1074<p>Animation blending/cross-fading (<code><a href="https://castle-engine.io/apidoc/html/CastleSceneCore.TCastleSceneCore.html#DefaultAnimationTransition">TCastleSceneCore.DefaultAnimationTransition</a></code>, <code><a href="https://castle-engine.io/apidoc/html/CastleSceneCore.TPlayAnimationParameters.html#TransitionDuration">TPlayAnimationParameters.TransitionDuration</a></code>).</p> 1075</li> 1076<li> 1077<p><a href="mirror_plane">Easy mirrors on flat surfaces</a>.</p> 1078<div class="paragraph"> 1079<div class="thumbnails thumbnails-align-left"> 1080 <a href="https://castle-engine.io/images/original_size/terrain_component_water.png" 1081 class="screenshot" 1082 title="Water reflecting terrain"><img 1083 style="float: right" 1084 src="https://castle-engine.io/images/thumb_const_height_size/terrain_component_water.webp" 1085 width="352" height="200" 1086 alt="Water reflecting terrain" 1087 ></a> 1088 <a href="https://castle-engine.io/images/original_size/terrain_component_wireframe.png" 1089 class="screenshot" 1090 title="Wireframe terrain with water rectangle"><img 1091 style="float: right" 1092 src="https://castle-engine.io/images/thumb_const_height_size/terrain_component_wireframe.webp" 1093 width="352" height="200" 1094 alt="Wireframe terrain with water rectangle" 1095 ></a></div> 1096</div> 1097</li> 1098<li> 1099<p><a href="x3d_implementation_cubemaptexturing.php">Easy mirrors on curved surfaces (using generated cubemaps)</a>.</p> 1100</li> 1101<li> 1102<p><em>Physically-Based Rendering</em> used by default for glTF and X3D 4.0 models using <code><a href="https://castle-engine.io/apidoc/html/X3DNodes.TPhysicalMaterialNode.html">TPhysicalMaterialNode</a></code>.</p> 1103</li> 1104<li> 1105<p>Alternative <em>unlit</em> shading also available, with glTF and X3D 4.0 models using <code>
1105<a href="https://castle-engine.io/apidoc/html/X3DNodes.TUnlitMaterialNode.html">TUnlitMaterialNode</a></code>.</p> 1106</li> 1107<li> 1108<p>Alternative "classic" Phong shading is also available using <code><a href="https://castle-engine.io/apidoc/html/X3DNodes.TMaterialNode.html">TMaterialNode</a></code> or <code><a href="https://castle-engine.io/apidoc/html/X3DLoad.TCastleSceneLoadOptions.html#GltfPhongMaterials">TCastleSceneLoadOptions.GltfPhongMaterials</a></code>.</p> 1109</li> 1110<li> 1111<p><a href="shadow_maps">Shadow maps</a> (with auto-detection of limits, correct shadows from multiple light sources).</p> 1112<div class="paragraph"> 1113<div class="thumbnails thumbnails-align-left"> 1114 <a href="https://castle-engine.io/images/original_size/rhan_shrine_5_everything.png" 1115 class="screenshot" 1116 title="Bump mapping and shadow maps from multiple light sources"><img 1117 style="float: right" 1118 src="https://castle-engine.io/images/thumb_const_height_size/rhan_shrine_5_everything.webp" 1119 width="283" height="200" 1120 alt="Bump mapping and shadow maps from multiple light sources" 1121 ></a> 1122 <a href="https://castle-engine.io/images/original_size/lights_editor_shadow_maps.png" 1123 class="screenshot" 1124 title="Lights editor on a scene with shadow maps"><img 1125 style="float: right" 1126 src="https://castle-engine.io/images/thumb_const_height_size/lights_editor_shadow_maps.webp" 1127 width="230" height="200" 1128 alt="Lights editor on a scene with shadow maps" 1129 ></a> 1130 <a href="https://castle-engine.io/images/original_size/sunny_street_tree_hard.png" 1131 class="screenshot" 1132 title="Close up shadows on the tree. Notice that leaves (modeled by alpha-test texture) also cast correct shadows."><img 1133 style="float: right" 1134 src="https://castle-engine.io/images/thumb_const_height_size/sunny_street_tree_hard.webp" 1135 width="341" height="200" 1136 alt="Close up shadows on the tree. Notice that leaves (modeled by alpha-test texture) also cast correct shadows." 1137 ></a></div> 1138</div> 1139</li> 1140<li> 1141<p><a href="shadow_volumes">Shadow volumes</a> (with z-fail / z-pass automatic detection, silhouette detection).</p> 1142<div class="paragraph"> 1143<div class="thumbnails thumbnails-align-left"> 1144 <a href="https://castle-engine.io/images/original_size/rift_2.png" 1145 class="screenshot" 1146 title="Fixed-camera game"><img 1147 style="float: right" 1148 src="https://castle-engine.io/images/thumb_const_height_size/rift_2.webp" 1149 width="254" height="200" 1150 alt="Fixed-camera game" 1151 ></a></div> 1152</div> 1153</li> 1154<li> 1155<p>Screen effects (post-processing) API to define post-processing effects using shaders. See <a href="screen_effects">screen effects specification</a>, you can add screen effects over any UI control: just place it as child of <code><a href="https://castle-engine.io/apidoc/html/CastleScreenEffects.TCastleScreenEffects.html">TCastleScreenEffects</a></code>. See <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/screen_effects_demo/">examples/screen_effects_demo/</a>.</p> 1156<div class="paragraph"> 1157<div class="thumbnails thumbnails-align-left"> 1158 <a href="https://castle-engine.io/images/original_size/little_things_screen_7.png" 1159 class="screenshot" 1160 title=""Little Things" game with screen effects"><img 1161 style="float: right" 1162 src="https://castle-engine.io/images/thumb_const_height_size/little_things_screen_7.webp" 1163 width="250" height="200" 1164 alt=""Little Things" game with screen effects" 1165 ></a></div> 1166</div> 1167</li> 1168<li> 1169<p><a href="color_space">Color Space (Gamma Correction)</a>.</p> 1170</li> 1171<li> 1172<p>Easily design <a href="background">background (with sky/ground gradients, skybox)</a>, <a href="fog">fog</a>.</p> 1173</li> 1174<li> 1175<p>Multi-sampling (full-screen anti-aliasing), just set <code><a href="https://castle-engine.io/apidoc/html/CastleWindow.TCastleWindow.html#AntiAliasing">TCastleWindow.AntiAliasing</a></code>.</p> 1176</li> 1177<li> 1178<p><a href="occlusion_culling">Occlusion Culling</a> can greatly speed-up rendering in certain cases.</p> 1179</li> 1180</ul> 1181</div> 1182<div class="paragraph"> 1183<div class="thumbnails thumbnails-align-left"> 1184 <a href="https://castle-engine.io/images/original_size/rendered_texture_with_background.png" 1185 class="screenshot" 1186 title="RenderedTexture"><img 1187 style="float: right" 1188 src="https://castle-engine.io/images/thumb_const_height_size/rendered_texture_with_background.webp" 1189 width="267" height="200"
1190 alt="RenderedTexture" 1191 ></a> 1192 <a href="https://castle-engine.io/images/original_size/chinchilla_diffuse_prt.png" 1193 class="screenshot" 1194 title="Precomputed Radiance Transfer"><img 1195 style="float: right" 1196 src="https://castle-engine.io/images/thumb_const_height_size/chinchilla_diffuse_prt.webp" 1197 width="267" height="200" 1198 alt="Precomputed Radiance Transfer" 1199 ></a></div> 1200</div> 1201<div class="ulist"> 1202<ul> 1203<li> 1204<p>Modern approach to <em>OpenGL</em> and <em>OpenGLES</em> usage:</p> 1205<div class="openblock"> 1206<div class="content"> 1207<div class="ulist"> 1208<ul> 1209<li> 1210<p>Using modern OpenGL (OpenGL 3.3 "core" profile).</p> 1211</li> 1212<li> 1213<p>Possibility to use ancient OpenGL (even 1.1) if we have to. To support ancient, buggy systems or virtual machines. See <code><a href="https://castle-engine.io/apidoc/html/CastleGLUtils.TGLFeatures.html#RequestCapabilities">TGLFeatures.RequestCapabilities</a></code> for information how to test it.</p> 1214</li> 1215<li> 1216<p>We can leverage some OpenGL ES 3.0 features (for shadow maps, 3D textures, occlusion culling…​), but any OpenGL ES 2.0 system works.</p> 1217</li> 1218<li> 1219<p>On desktops we can use both OpenGL (default) and OpenGLES. On mobile, naturally only OpenGLES.</p> 1220</li> 1221<li> 1222<p>Easy OpenGL debugging (<code><a href="https://castle-engine.io/apidoc/html/CastleGLUtils.TGLFeatures.html#Debug">TGLFeatures.Debug</a></code> allows to get rich logs and exceptions from GL).</p> 1223</li> 1224</ul> 1225</div> 1226</div> 1227</div> 1228</li> 1229</ul> 1230</div> 1231</div> 1232</div> 1233<div class="sect1"> 1234<h2 id="_images">8. Images</h2> 1235<div class="sectionbody"> 1236<div class="paragraph"> 1237<p>Easily display <a href="using_images">display images</a> as user interface or in a viewport.</p> 1238</div> 1239<div class="ulist"> 1240<ul> 1241<li> 1242<p>Numerous image formats (like PNG, JPG, RGBE) supported thanks to the integration with <a href="https://imaginglib.sourceforge.io/">Vampyre Imaging Library</a>.</p> 1243</li> 1244<li> 1245<p>Full support for KTX and DDS that enable GPU texture compression, cubemaps and more.</p> 1246</li> 1247<li> 1248<p><a href="auto_generated_textures">Automatic texture compression and downscaling</a>.</p> 1249</li> 1250</ul> 1251</div> 1252</div> 1253</div> 1254<div class="sect1"> 1255<h2 id="_user_interface_components">9. User interface components</h2> 1256<div class="sectionbody"> 1257<div class="paragraph"> 1258<div class="thumbnails thumbnails-align-left"> 1259 <a href="https://castle-engine.io/images/original_size/inspector_design.png" 1260 class="screenshot" 1261 title="Inspector UI"><img 1262 style="float: right" 1263 src="https://castle-engine.io/images/thumb_const_height_size/inspector_design.webp" 1264 width="352" height="200" 1265 alt="Inspector UI" 1266 ></a> 1267 <a href="https://castle-engine.io/images/original_size/ui_image.png" 1268 class="screenshot" 1269 title="Images"><img 1270 style="float: right" 1271 src="https://castle-engine.io/images/thumb_const_height_size/ui_image.webp" 1272 width="343" height="200" 1273 alt="Images" 1274 ></a></div> 1275</div> 1276<div class="ulist"> 1277<ul> 1278<li> 1279<p><a href="user_interface">User interface</a> library providing cross-platform UI controls that work on all platforms, like buttons, labels, images.</p> 1280</li> 1281<li> 1282<p>Their look can be adjusted to match the style of your game.</p> 1283</li> 1284<li> 1285<p>Your game is organized into <a href="views">views</a>. Each view can have a design (created in editor) and an associated unit where you can <a href="view_events">handle various events, like a key press</a>.</p> 1286</li> 1287<li> 1288<p>Automatic UI scaling to adjust to any screen resolution and aspect ratio with anchors.</p> 1289</li> 1290<li> 1291<p>Powerful masks: <a href="https://castle-engine.io/user_interface#_mask">manual</a>, <a href="https://castle-engine.io/apidoc/html/CastleControls.TCastleMask.html">API reference</a>, <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/user_interface/mask">example</a>.</p> 1292</li> 1293</ul> 1294</div> 1295<div class="sect2"> 1296<h3 id="_text_and_fonts">9.1. Text and fonts</h3> 1297<div class="ulist"> 1298<ul> 1299<li> 1300<p><a href="text">Rendering text in user interface and in 3D, with customizable fonts</a>.</p> 1301</li> 1302<li> 1303<p>Fonts can be loaded from common formats (like TTF or OTF, <code><a href="https://castle-engine.io/apidoc/html/CastleFonts.TCastleFont.html">TCastleFont</a></code>) or images (<code><a href="https://castle-engine.io/apidoc/html/CastleFonts.TCastleBitmapFont.html">TCastleBitmapFont</a></code>).</p> 1304</li> 1305<li> 1306<p>Localization (including automatically translating user interface and <code>resourcestring</code>s).</p> 1307</li> 1308<li> 1309<p>UTF-8 support for all strings through the engine API, in particular to render text.</p> 1310</li> 1311</ul> 1312</div> 1313</div> 1314</div> 1315</div> 1316<div class="sect1"> 1317<h2 id="_networking">10. Networking</h2> 1318<div class="sectionbody"> 1319<div class="paragraph"> 1320<p>The engine uses URLs, allows to download contents of URLs, and can be integrated
1320with various networking libraries.</p> 1321</div> 1322<div class="paragraph"> 1323<div class="thumbnails thumbnails-align-left"> 1324 <a href="https://castle-engine.io/images/original_size/delphi_linux_downloads.png" 1325 class="screenshot" 1326 title="asynchronous_download example, downloading multiple URLs asynchronously (without blocking the UI)"><img 1327 style="float: right" 1328 src="https://castle-engine.io/images/thumb_const_height_size/delphi_linux_downloads.webp" 1329 width="389" height="200" 1330 alt="asynchronous_download example, downloading multiple URLs asynchronously (without blocking the UI)" 1331 ></a> 1332 <a href="https://castle-engine.io/images/original_size/not_quake_1.png" 1333 class="screenshot" 1334 title=""Not Quake" demo - real-time network game"><img 1335 style="float: right" 1336 src="https://castle-engine.io/images/thumb_const_height_size/not_quake_1.webp" 1337 width="339" height="200" 1338 alt=""Not Quake" demo - real-time network game" 1339 ></a> 1340 <a href="https://castle-engine.io/images/original_size/mormot_example_screenshot1.png" 1341 class="screenshot" 1342 title="Collaborative editing of 3D world using Castle Game Engine and mORMot2"><img 1343 style="float: right" 1344 src="https://castle-engine.io/images/thumb_const_height_size/mormot_example_screenshot1.webp" 1345 width="343" height="200" 1346 alt="Collaborative editing of 3D world using Castle Game Engine and mORMot2" 1347 ></a> 1348 <a href="https://castle-engine.io/images/original_size/server_and_2_clients.png" 1349 class="screenshot" 1350 title="TCP server and 2 clients, on Windows"><img 1351 style="float: right" 1352 src="https://castle-engine.io/images/thumb_const_height_size/server_and_2_clients.webp" 1353 width="448" height="200" 1354 alt="TCP server and 2 clients, on Windows" 1355 ></a></div> 1356</div> 1357<div class="ulist"> 1358<ul> 1359<li> 1360<p>All paths are expressed as URLs with some special CGE protocols, see <a href="url">URLs, loading (downloading) and saving resources</a>.</p> 1361</li> 1362<li> 1363<p>Application data can be always accessed using <a href="data">URLs like <code>castle-data:/xxx</code></a>.</p> 1364</li> 1365<li> 1366<p>You can download URLs asynchronously using <code><a href="https://castle-engine.io/apidoc/html/CastleDownload.TCastleDownload.html">TCastleDownload</a></code>.</p> 1367</li> 1368<li> 1369<p>Integration with <a href="multi_player#indy">Indy</a> (example client-server in <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/network/tcp_connection">examples/network/tcp_connection</a>).</p> 1370</li> 1371<li> 1372<p>Integration with <a href="multi_player#mormot">mORMot 2</a> (example in our <a href="https://github.com/castle-engine/castle-and-mormot-collaborative-editing/">castle-and-mormot-collaborative-editing</a> demo).</p> 1373</li> 1374<li> 1375<p>Integration with <a href="multi_player#rnl">RNL</a> (example in our <a href="https://github.com/castle-engine/not-quake">not-quake</a> demo).</p> 1376</li> 1377</ul> 1378</div> 1379</div> 1380</div> 1381<div class="sect1"> 1382<h2 id="_optimization_and_profiling">11. Optimization and profiling</h2> 1383<div class="sectionbody"> 1384<div class="paragraph"> 1385<p>We have extensive <a href="optimization">optimization documentation</a> and a number of features to help you make your game faster.</p> 1386</div> 1387<div class="ulist"> 1388<ul> 1389<li> 1390<p>Inspector available under F8 in any debug game shows FPS profile and much more. It allows to inspect the current properties of all components, to tweak them at run-time, and even to <a href="https://castle-engine.io/wp/2024/07/11/auto-reloading-hot-reloading-when-the-game-runs-and-more-things-auto-reloaded-at-design-time/">hot-reload</a> assets at run-time.</p> 1391</li> 1392<li> 1393<p>Built-in simple profiler <code><a href="https://castle-engine.io/apidoc/html/CastleTimeUtils.TCastleProfiler.html">TCastleProfiler</a></code>.</p> 1394</li> 1395<li> 1396<p>Built-in frame profiler <code><a href="https://castle-engine.io/apidoc/html/CastleTimeUtils.TCastleFrameProfiler.html">TCastleFrameProfiler</a></code>.</p> 1397</li> 1398<li> 1399<p>Built-in texture memory profiler <code><a href="https://castle-engine.io/apidoc/html/CastleGLImages.html#TextureMemoryProfiler">TextureMemoryProfiler</a></code>.</p> 1400</li> 1401<li> 1402<p><code><a href="https://castle-engine.io/apidoc/html/CastleViewport.TCastleViewport.html#DynamicBatching">TCastleViewport.DynamicBatching</a></code> is available to batch multiple shapes, to conserve draw calls.</p> 1403</li> 1404</ul> 1405</div> 1406</div> 1407</div> 1408<div class="sect1"> 1409<h2 id="_sound">12. Sound</h2> 1410<div class="sectionbody"> 1411<div class="paragraph"> 1412<p>You can play <a href="sound">sound</a>, spatial (in 3D) or not.</p> 1413</div> 1414<div class="paragraph"> 1415<div class="thumbnails thumbnails-align-left"> 1416 <a href="https://castle-engine.io/images/original_size/sound_example_3d_game_source.png" 1417 class="screenshot" 1418 title="3D game sound demo - TCastleSoundSource"><img 1419 style="float: right" 1420 src="https://castle-engine.io/images/thumb_const_height_size/sound_example_3d_game_source.webp" 1421 width="352" height="200" 1422 alt="3D game sound demo - TCastleSoundSource" 1423 ></a></div> 1424</div> 1425<div class="ulist"> 1426<ul> 1427<li> 1428<p>Supports for various sound backends: <a href="openal">OpenAL</a> or <a href="fmod">FMOD</a>, on multiple platforms.</p> 1429</li> 1430<li> 1431<p>Sound streaming is done, for efficient playback of music tracks.</p> 1432</li> 1433<li> 1434<p>WAV and OggVorbis file formats are supported with all sound backends.</p> 1435</li> 1436<li> 1437<p>Sound components <code><a href="https://castle-engine.io/apidoc/html/CastleSoundEngine.TCastleSound.html">TCastleSound</a></code> and <code><a href="https://castle-engine.io/apidoc/html/CastleBehaviors.TCastleSoundSource.html">TCastleSoundSource</a></code> can be designed and tested also in editor.</p> 1438</li> 1439<li> 1440<p>Automatic sound source management based on priorities.</p> 1441</li> 1442</ul> 1443</div> 1444</div> 1445</div> 1446<div class="sect1"> 1447<h2 id="_physics">13. Physics</h2> 1448<div class="sectionbody"> 1449<div class="paragraph"> 1450<div class="thumbnails thumbnails-align-left"> 1451 <a href="https://castle-engine.io/images/original_size/physics_1.png" 1452 class="screenshot" 1453 title="Bunch of physics rigid bodies"><img 1454 style="float: right" 1455 src="https://castle-engine.io/images/thumb_const_height_size/physics_1.webp" 1456 width="343" height="200" 1457 alt="Bunch of physics rigid bodies" 1458 ></a> 1459 <a href="https://castle-engine.io/images/original_size/physics_mesh.png" 1460 class="screenshot" 1461 title="Physics with mesh collider"><img 1462 style="float: right" 1463 src="https://castle-engine.io/images/thumb_const_height_size/physics_mesh.webp" 1464 width="343" height="200" 1465 alt="Physics with mesh collider" 1466 ></a> 1467 <a href="https://castle-engine.io/images/original_size/physics_2d.png" 1468 class="screenshot" 1469 title="Physics 2D"><img 1470 style="float: right" 1471 src="https://castle-engine.io/images/thumb_const_height_size/physics_2d.webp" 1472 width="343" height="200" 1473 alt="Physics 2D" 1474 ></a></div> 1475</div> 1476<div class="paragraph"> 1477<p>Use <a href="physics" class="bare">physics</a> to calculate and react to collisions between objects.</p> 1478</div> 1479<div class="ulist"> 1480<ul> 1481<li> 1482<p>Define <a href="physics#_rigid_bodies_and_colliders">rigid bodies and colliders</a> on your objects. You can do it visually in the editor (and visualize colliders to make sure they make sense). Of course you can also set them up using code.</p> 1483</li> 1484<li> 1485<p>Allow gravity and collisions to automatically have an effect.</p> 1486</li> 1487<li> 1488<p>
1488Test how physics behaves right inside the editor using <a href="physics#_physics_simulation_in_the_editor">"Physics Simulation"</a> in editor.</p> 1489</li> 1490<li> 1491<p><a href="physics#_detecting_collisions">React to collisions by registering events</a>. Objects can also be <em>"triggers"</em> if you only want to detect when something enters their volume.</p> 1492</li> 1493<li> 1494<p>Set up <a href="physics#_joints">joints</a> that connect rigid bodies in some ways, e.g. to create a hinge.</p> 1495</li> 1496<li> 1497<p>Physics is fully useful in both 3D and <a href="physics#_physics_simulation_in_the_editor">2D</a>. Consult our examples (in <code>examples/physics/</code>) for demos.</p> 1498</li> 1499<li> 1500<p>Manually <a href="physics#_forces_pushing_rotating_bodies">apply forces to affect rigid bodies using physics</a>, e.g. to make a character jump, or cause an explosion.</p> 1501</li> 1502<li> 1503<p>Perform <a href="physics#_ray_casting_querying_for_collision">collision queries using physics</a>, like "ray casts". Use e.g. <code><a href="https://castle-engine.io/apidoc/html/CastleTransform.TCastleAbstractRootTransform.html#PhysicsRayCast-TVector3-TVector3-Single-TCastleRigidBody-TPhysicsLayers-">Viewport.Items.PhysicsRayCast</a></code>.</p> 1504</li> 1505<li> 1506<p>Organize objects in <a href="physics#_layers">layers</a> to limit what collides with what.</p> 1507</li> 1508<li> 1509<p>Using <a href="https://github.com/BeRo1985/kraft/">Kraft Physics Engine</a> under the hood.</p> 1510</li> 1511<li> 1512<p><em>Deprecated</em>: We also feature an older system with (for now) a few more ways to query collisions. Just set <code><a href="https://castle-engine.io/apidoc/html/CastleSceneCore.TCastleSceneCore.html#PreciseCollisions">TCastleSceneCore.PreciseCollisions</a></code> to <code>true</code> to make collision queries treat your scene as a precise mesh. Then use routines like <code><a href="https://castle-engine.io/apidoc/html/CastleTransform.TCastleAbstractRootTransform.html#WorldRayCast-TVector3-TVector3-Single-">Viewport.Items.WorldRayCast</a></code> or <code><a href="https://castle-engine.io/apidoc/html/CastleTransform.TCastleAbstractRootTransform.html#WorldBoxCollision-TBox3D-">Viewport.Items.WorldBoxCollision</a></code> to query whether something collides.</p> 1513</li> 1514</ul> 1515</div> 1516</div> 1517</div> 1518<div class="sect1"> 1519<h2 id="_tiled_integration">14. Tiled integration</h2> 1520<div class="sectionbody"> 1521<div class="paragraph"> 1522<p>You can design game maps using <a href="https://www.mapeditor.org/">Tiled</a>.</p> 1523</div> 1524<div class="paragraph"> 1525<div class="thumbnails thumbnails-align-left"> 1526 <a href="https://castle-engine.io/images/original_size/tiled_editor_snow.png" 1527 class="screenshot" 1528 title="Tiled snow map (with animations)"><img 1529 style="float: right" 1530 src="https://castle-engine.io/images/thumb_const_height_size/tiled_editor_snow.webp" 1531 width="353" height="200" 1532 alt="Tiled snow map (with animations)" 1533 ></a> 1534 <a href="https://castle-engine.io/images/original_size/tiled_editor_beach.png" 1535 class="screenshot" 1536 title="Tiled beach map (with animations)"><img 1537 style="float: right" 1538 src="https://castle-engine.io/images/thumb_const_height_size/tiled_editor_beach.webp" 1539 width="353" height="200" 1540 alt="Tiled beach map (with animations)" 1541 ></a> 1542 <a href="https://castle-engine.io/images/original_size/tiled_3.png" 1543 class="screenshot" 1544 title="Tiled isometric map"><img 1545 style="float: right" 1546 src="https://castle-engine.io/images/thumb_const_height_size/tiled_3.webp" 1547 width="339" height="200" 1548 alt="Tiled isometric map" 1549 ></a> 1550 <a href="https://castle-engine.io/images/original_size/tiled_strategy_hex.png" 1551 class="screenshot" 1552 title="Tiled hexagonal map in "Strategy Game" demo"><img 1553 style="float: right" 1554 src="https://castle-engine.io/images/thumb_const_height_size/tiled_strategy_hex.webp" 1555 width="343" height="200" 1556 alt="Tiled hexagonal map in "Strategy Game" demo" 1557 ></a> 1558 <a href="https://castle-engine.io/images/original_size/tiled_strategy_iso.png" 1559 class="screenshot" 1560 title="Tiled isometric map in "Strategy Game" demo"><img 1561 style="float: right" 1562 src="https://castle-engine.io/images/thumb_const_height_size/tiled_strategy_iso.webp" 1563 width="343" height="200" 1564 alt="Tiled isometric map in "Strategy Game" demo" 1565 ></a> 1566 <a href="https://castle-engine.io/images/original_size/tiled_strategy_ortho.png" 1567 class="screenshot" 1568 title="Tiled orthogonal map in "Strategy Game" demo"><img 1569 style="float: right" 1570 src="https://castle-engine.io/images/thumb_const_height_size/tiled_strategy_ortho.webp" 1571 width="343" height="200" 1572 alt="Tiled orthogonal map in "Strategy Game" demo" 1573 ></a></div> 1574</div> 1575<div class="ulist"> 1576<ul> 1577<li> 1578<p>Tiled maps (TMX files) can be loaded into <code><a href="https://castle-engine.io/apidoc/html/CastleTiledMap.TCastleTiledMap.html">TCastleTiledMap</a></code>
1578 for an efficient 2D or 3D display in a viewport.</p> 1579</li> 1580<li> 1581<p>Viewport display means they can be combined with other scenes on top of it, like sprite sheets for units on the map.</p> 1582</li> 1583<li> 1584<p>We support various map types (orthogonal, isometric, hexagonal), layers (you control which layers are displayed), animations and more.</p> 1585</li> 1586<li> 1587<p>See <a href="https://castle-engine.io/tiled_maps">the manual about Tiled map</a>.</p> 1588</li> 1589<li> 1590<p>See <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/tiled/strategy_game_demo/">examples/tiled/strategy_game_demo</a> for a complete strategy game in CGE using Tiled maps.</p> 1591</li> 1592</ul> 1593</div> 1594</div> 1595</div> 1596<div class="sect1"> 1597<h2 id="_data_and_systems">15. Data and Systems</h2> 1598<div class="sectionbody"> 1599<div class="paragraph"> 1600<p>Developing games means dealing a lot with <em>data</em> (assets). We have full-featured systems providing all the capabilities you need. They are the basis of our <a href="editor" class="bare">editor</a> but are also useful at run-time to deal with your data while your application runs.</p> 1601</div> 1602<div class="ulist"> 1603<ul> 1604<li> 1605<p>Automatic packaging of <a href="data">data</a> files for all platforms, exposing them through <code>castle-data:/</code> URL.</p> 1606</li> 1607<li> 1608<p>All the reading, writing, searching in our engine accepts <a href="https://castle-engine.io/url">URLs</a>. So you can use regular file-system (<code>file:/</code>), you can refer to files in your data (<code>castle-data:/</code>), you can refer to resources inside ZIP files, or even resources on the network (<code>https:/…​</code>). You can easily register your own URL protocols (schemes) to extend this system.</p> 1609</li> 1610<li> 1611<p>ZIP handling, supporting read and write, supporting all platforms and compilers, with optional URL protocol registration. See <code><a href="https://castle-engine.io/apidoc/html/CastleZip.TCastleZip.html">TCastleZip</a></code> and <a href="https://castle-engine.io/wp/2025/03/09/new-class-for-zip-handling-tcastlezip-progress-on-new-pretty-wireframe-approach-woff-fonts-support-lod-usage-demo/">news about ZIP</a>.</p> 1612</li> 1613<li> 1614<p>Loading and saving components (our engine components or any other Pascal <code>TComponent</code>) to JSON files. The base unit to do this is <code><a href="https://castle-engine.io/apidoc/html/CastleComponentSerialize.html">CastleComponentSerialize</a></code>, and there are many things build "on top" of it, like our <a href="editor" class="bare">editor</a>, loading designs in views, <a href="https://castle-engine.io/reuse_design">reusing designs</a>.</p> 1615</li> 1616<li> 1617<p>Cloning the components using <code><a href="https://castle-engine.io/apidoc/html/CastleComponentSerialize.TCastleComponentFactory.html">TCastleComponentFactory</a></code>, <code><a href="https://castle-engine.io/apidoc/html/CastleComponentSerialize.html#ComponentClone-TComponent-TComponent-">ComponentClone</a></code>. See e.g. <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/2d_games/space_shooter">examples/2d_games/space_shooter</a> that uses a factory to spawn rockets and rocks.</p> 1618</li> 1619</ul> 1620</div> 1621</div> 1622</div> 1623<div class="sect1"> 1624<h2 id="_particles">16. Particles</h2> 1625<div class="sectionbody"> 1626<div class="paragraph"> 1627<p>Particle systems are not <strong>yet</strong> part of the core <em>Castle Game Engine</em> units. However you can use additional open-source components that add this capability to the engine:</p> 1628</div> 1629<div class="paragraph"> 1630<div class="thumbnails thumbnails-align-left"> 1631 <a href="https://castle-engine.io/images/original_size/particles_2.webp" 1632 class="screenshot" 1633 title="Particles"><img 1634 style="float: right" 1635 src="https://castle-engine.io/images/thumb_const_height_size/particles_2.webp" 1636 width="379" height="200" 1637 alt="Particles" 1638 ></a> 1639 <a href="https://castle-engine.io/images/original_size/particles_3.webp" 1640 class="screenshot" 1641 title="Particles"><img 1642 style="float: right" 1643 src="https://castle-engine.io/images/thumb_const_height_size/particles_3.webp" 1644 width="379" height="200" 1645 alt="Particles" 1646 ></a> 1647 <a href="https://castle-engine.io/images/original_size/particles_4.webp" 1648 class="screenshot" 1649 title="Particles"><img 1650 style="float: right" 1651 src="https://castle-engine.io/images/thumb_const_height_size/particles_4.webp" 1652 width="378" height="200" 1653 alt="Particles" 1654 ></a></div> 1655</div> 1656<div class="ulist"> 1657<ul> 1658<li> 1659<p><a href="https://github.com/Kagamma/cge-3d-particle-emitter">Particle Emitter</a>: Particle system for 3D and 2D that supports editing right inside CGE editor. Particles are calculated with GPU acceleration (transform feedback). By <em>Trung Le (Kagamma)</em>.</p> 1660<div class="paragraph"> 1661<div class="thumbnails thumbnails-align-left"> 1662 <a href="https://castle-engine.io/images/original_size/cge_3d_particles_editor.png" 1663 class="screenshot" 1664 title="Particles editor"><img 1665 style="float: right" 1666 src="https://castle-engine.io/images/thumb_const_height_size/cge_3d_particles_editor.webp" 1667 width="352" height="200" 1668 alt="Particles editor" 1669 ></a></div> 1670</div> 1671</li> 1672<li> 1673<p><a href="https://github.com/Kagamma/cge-effekseer">Effekseer Integration</a>: Integration with <a href="https://effekseer.github.io/en/">Effekseer</a>, a full-featured open-source particle effect creation tool. Also by <em>Trung Le (Kagamma)</em>.</p> 1674<div class="paragraph"> 1675<div class="thumbnails thumbnails-align-left"> 1676 <a href="https://castle-engine.io/images/original_size/cge_effekseer.png" 1677 class="screenshot" 1678 title="Effekseer Integration"><img 1679 style="float: right" 1680 src="https://castle-engine.io/images/thumb_const_height_size/cge_effekseer.webp" 1681 width="373" height="200" 1682 alt="Effekseer Integration" 1683 ></a></div> 1684</div> 1685</li> 1686</ul> 1687</div> 1688</div> 1689</div> 1690<div class="sect1"> 1691<h2 id="_native_and_fast_code_using_modern_pascal">17. Native and fast code using modern Pascal</h2> 1692<div class="sectionbody"> 1693<div class="paragraph"> 1694<p>The engine, as well as your games, are written using <a href="why_pascal">modern Object Pascal</a>.</p> 1695</div> 1696<div class="paragraph"> 1697<div class="thumbnails thumbnails-align-left"> 1698 <a href="https://castle-engine.io/images/original_size/combined_fpc_delphi.png" 1699 class="screenshot" 1700 title="FPC, Delphi, Visual Studio Code"><img 1701 style="float: right" 1702 src="https://castle-engine.io/images/thumb_const_height_size/combined_fpc_delphi.webp" 1703 width="352" height="200" 1704 alt="FPC, Delphi, Visual Studio Code" 1705 ></a></div> 1706</div> 1707<div class="ulist"> 1708<ul> 1709<li> 1710<p>We maintain a <a href="modern_pascal">modern Object Pascal introduction</a> book to learn the language and <a href="learn_pascal">link to many more learning resources</a>.</p> 1711</li> 1712<li> 1713<p>We support <a href="https://www.freepascal.org/">FPC</a>
1713 and <a href="https://www.embarcadero.com/products/delphi/">Delphi</a> compilers, see <a href="supported_compilers">Supported compilers and IDEs</a>.</p> 1714</li> 1715<li> 1716<p>Pascal as a programming language is</p> 1717<div class="openblock"> 1718<div class="content"> 1719<div class="ulist"> 1720<ul> 1721<li> 1722<p>elegant (type-safe, OOP, generics),</p> 1723</li> 1724<li> 1725<p>full-featured (big existing codebases can be used, e.g. Pascal and C, C++ libraries to connect your games with database, AI, networking),</p> 1726</li> 1727<li> 1728<p>native (compiled to native code that runs fast out-of-the-box).</p> 1729<div class="admonitionblock note"> 1730<table> 1731<tr> 1732<td class="icon"> 1733<div class="title">Note</div> 1734</td> 1735<td class="content"> 1736<div class="paragraph"> 1737<p>To interact with a library 1738using C++ classes (and other features that only C++ compilers understand) 1739you generally need to write a <em>"wrapper"</em> library that exposes the equivalent API in plain C. 1740This is exactly the same as trying to use C++ library e.g. from C#.</p> 1741</div> 1742</td> 1743</tr> 1744</table> 1745</div> 1746</li> 1747</ul> 1748</div> 1749</div> 1750</div> 1751</li> 1752<li> 1753<p>The same programming language that is used to make the engine is used for your applications — this results in simplicity (it’s easy to contribute) and speed.</p> 1754</li> 1755<li> 1756<p>Fast execution. It’s a language that compiles to fast native code, while staying elegant and type-safe.</p> 1757</li> 1758<li> 1759<p>Fast compilation.</p> 1760</li> 1761<li> 1762<p>Native debugging. It’s just a native application using native debugger. Debugging is integral part of the <a href="https://www.lazarus-ide.org/">Lazarus IDE</a>.</p> 1763</li> 1764</ul> 1765</div> 1766</div> 1767</div> 1768<div class="sect1"> 1769<h2 id="_build_tool_and_continuous_integration">18. Build tool and continuous integration</h2> 1770<div class="sectionbody"> 1771<div class="paragraph"> 1772<div class="thumbnails thumbnails-align-left"> 1773 <a href="https://castle-engine.io/images/original_size/combined_osi_ci_logos_2.png" 1774 class="screenshot" 1775 title="Open source, Jenkins, Docker, Codeberg, Woodpecker CI, GitHub Actions, GitLab CI"><img 1776 style="float: right" 1777 src="https://castle-engine.io/images/thumb_const_height_size/combined_osi_ci_logos_2.webp" 1778 width="400" height="200" 1779 alt="Open source, Jenkins, Docker, Codeberg, Woodpecker CI, GitHub Actions, GitLab CI" 1780 ></a></div> 1781</div> 1782<div class="paragraph"> 1783<p><a href="build_tool">Build tool</a> to manage your project from the command-line or in batch mode (good for continuous integration). The build tool, just like editor, reads project information from <a href="project_manifest">CastleEngineManifest.xml</a> file.</p> 1784</div> 1785<div class="ulist"> 1786<ul> 1787<li> 1788<p>Build tool can build, package, run your application and <a href="auto_generated_textures">autogenerate compressed textures</a> (and more).</p> 1789</li> 1790<li> 1791<p>
1791You can build for any supported target platform. You may need to install cross-compiler (e.g. using <a href="fpcupdeluxe" class="bare">fpcupdeluxe</a>), some platforms may also require additional tools (see their docs like <a href="android">Android</a>).</p> 1792</li> 1793<li> 1794<p>We can build ready applications, like APK / AAB for Android, IPA for iOS.</p> 1795</li> 1796<li> 1797<p><a href="docker">Docker image</a> with CGE and prerequisites (FPC, Android build tools, texture processing tools) to easily build CGE applications.</p> 1798</li> 1799<li> 1800<p>Ready instructions to automatically build CGE projects using:</p> 1801<div class="openblock"> 1802<div class="content"> 1803<div class="ulist"> 1804<ul> 1805<li> 1806<p><a href="github_actions">GitHub Actions</a></p> 1807</li> 1808<li> 1809<p><a href="gitlab_ci">GitLab CI</a></p> 1810</li> 1811<li> 1812<p><a href="woodpecker">Woodpecker CI</a></p> 1813</li> 1814<li> 1815<p><a href="jenkins">Jenkins</a></p> 1816</li> 1817<li> 1818<p>or any other <a href="ci">CI/CD system</a>.</p> 1819</li> 1820</ul> 1821</div> 1822</div> 1823</div> 1824<div class="paragraph"> 1825<p>Enjoy modern <em>continuous integration</em>, for free, however you host your code!</p> 1826</div> 1827</li> 1828</ul> 1829</div> 1830</div> 1831</div> 1832<div class="sect1"> 1833<h2 id="_free_open_source_software">19. Free open-source software</h2> 1834<div class="sectionbody"> 1835<div class="paragraph"> 1836<p>The engine is licensed on <em>"LGPL with static linking exception"</em> license, similar to FPC and Lazarus standard libraries.</p> 1837</div> 1838<div class="ulist"> 1839<ul> 1840<li> 1841<p>In short it means that you <strong>can</strong> create proprietary, closed-source, commercial applications with it without any issues.</p> 1842</li> 1843<li> 1844<p>See <a href="license" class="bare">license</a> for details.</p> 1845</li> 1846</ul> 1847</div> 1848</div> 1849</div></div> <!-- class="castle-document" --><hr> 1850<p class="docs_improve_hint">To improve this documentation just <a href="https://github.com/castle-engine/cge-www/blob/master/htdocs/doc/features.adoc">edit this page</a> and create a pull request to <a href="https://github.com/castle-engine/cge-www">cge-www repository</a>.</p></div> 1851 <!-- Clear floats, e.g. MacStadium float image on main page, before footer --> 1852 <div class="clearfix"> 1853 </div> 1854 1855 <div class="card"> 1856 <div class="card-footer castle-page-footer"> 1857 <p>Copyright <a href="https://michalis.xyz/">
1857Michalis Kamburelis</a> and <a href="https://github.com/castle-engine/castle-engine/graphs/contributors">Castle Game Engine Contributors</a>. 1858 1859 <p>This <a href="https://github.com/castle-engine/cge-www">webpage is also open-source and we welcome pull requests to improve it</a>. 1860 1861 <p>We use cookies for analytics. See our <a href="https://castle-engine.io/privacy_policy">privacy policy</a>. 1862 1863 <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=8fb63cd5-e9ab-4d27-af9b-a979ff518df1" alt="Scarf Analytics" width="1" height="1"> 1864 </div> 1865 </div> 1866 1867 1868<!-- Matomo -->
1869<script> 1870 var _paq = _paq || []; 1871 /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ 1872 _paq.push(["setDomains", ["*.castle-engine.sourceforge.net","*.castle-engine.io","*.castle-engine.io","*.castle-engine.sourceforge.io"]]); 1873 _paq.push(['trackPageView']); 1874 _paq.push(['enableLinkTracking']); 1875 (function() { 1876 var u="//castle-engine.io/piwik/"; 1877 _paq.push(['setTrackerUrl', u+'piwik.php']); 1878 _paq.push(['setSiteId', '1']); 1879 var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; 1880 g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); 1881 })(); 1882</script>
1882 1883<noscript><p><img src="//castle-engine.io/piwik/piwik.php?idsite=1&rec=1" style="border:0;" alt=""></p></noscript> 1884<!-- End Matomo Code --> 1885 1886 1887<!-- jQuery. Used also by colorbox. -->
1888<script src="https://castle-engine.io/castle-engine-website-base/node_modules/jquery/dist/jquery.min.js"></script>
1888 1889 1890<!-- Using passive event listeners can improve scrolling performance, according to 1891 https://web.dev/uses-passive-event-listeners/ 1892 (linked from Lighthouse). 1893 Solution for jQuery from 1894 https://stackoverflow.com/questions/60357083/does-not-use-passive-listeners-to-improve-scrolling-performance-lighthouse-repo 1895 1896 This must be really right after jquery.min.js, in castle-engine.js it would be too late. 1897-->
1898<script> 1899jQuery.event.special.touchstart = { 1900 setup: function( _, ns, handle ) { 1901 this.addEventListener("touchstart", handle, { passive: !ns.includes("noPreventDefault") }); 1902 } 1903}; 1904jQuery.event.special.touchmove = { 1905 setup: function( _, ns, handle ) { 1906 this.addEventListener("touchmove", handle, { passive: !ns.includes("noPreventDefault") }); 1907 } 1908}; 1909jQuery.event.special.wheel = { 1910 setup: function( _, ns, handle ){ 1911 this.addEventListener("wheel", handle, { passive: true }); 1912 } 1913}; 1914jQuery.event.special.mousewheel = { 1915 setup: function( _, ns, handle ){ 1916 this.addEventListener("mousewheel", handle, { passive: true }); 1917 } 1918}; 1919</script>
1919 1920 1921<!-- Include colorbox after jQuery is known -->
1922<script src="https://castle-engine.io/castle-engine-website-base/node_modules/jquery-colorbox/jquery.colorbox-min.js"></script>
vendor: 1 bytes, line 1922
1922
1923<script> 1924 jQuery('a.screenshot').colorbox({opacity: 0.9, rel:'screenshot', maxWidth:'90%', maxHeight:'90%'}); 1925 // For AsciiDoctor images with role=screenshot 1926 jQuery('.screenshot a').colorbox({opacity: 0.9, rel:'screenshot', maxWidth:'90%', maxHeight:'90%'}); 1927</script>
1927 1928 1929<!-- Bootstrap JS (bundled, with Popper) -->
1930<script src="https://castle-engine.io/castle-engine-website-base/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
1930 1931 1932<!-- slick carousel https://github.com/kenwheeler/slick/ -->
1933<script src="https://castle-engine.io/castle-engine-website-base/node_modules/slick-carousel/slick/slick.min.js" fetchpriority="high"></script>
vendor: 1 bytes, line 1933
1933
1934<script> 1935$('.banner-container').on('init', function(event, slick){ 1936 /* Make images visible after slick initialization. 1937 Don't make images visible immediately (before Slick initializes) 1938 to avoid CLS. */ 1939 $(".banner-container img").css("display", "block"); 1940}); 1941jQuery(".banner-container").slick({ 1942 arrows: false, 1943 dots: true, 1944 autoplay: true, 1945 fade: true, 1946 pauseOnFocus: false, 1947 pauseOnHover: false 1948// autoplaySpeed: 2000 1949}); 1950</script>
1950 1951
1952<script src="https://castle-engine.io/castle-engine-website-base/castle-engine.js"></script>
1952 1953</body> 1954</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.