PageSourceSearch

https://castle-engine.io/features

html castle-engine.io collected 2026-09-24 10:19:09 UTC 100,334 bytes, 1,954 lines download raw bytes

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 &amp; 2D Game Development</title>
19
20    <meta property="og:title" content="Castle Game Engine Features - Cross-Platform 3D &amp; 2D Game Development" >
21    <meta name="twitter:title" content="Castle Game Engine Features - Cross-Platform 3D &amp; 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&nbsp;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="&quot;Escape from the Universe&quot; on Nintendo Switch">
402          <img
403             class="feature-image"
404             alt="&quot;Escape from the Universe&quot; 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="&quot;Dragon Squash&quot; 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="&quot;Dragon Squash&quot; on iOS (iPhone)"
510          ></a>
511          <a href="https://castle-engine.io/images/original_size/iphone_escape.jpg"
512             class="screenshot"
513             title="&quot;Escape from the Universe&quot; 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="&quot;Escape from the Universe&quot; 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="&quot;Escape from the Universe&quot; 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="&quot;Escape from the Universe&quot; 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&#8217;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="&quot;The Unholy Society&quot; 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="&quot;The Unholy Society&quot; 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&#8201;&#8212;&#8201;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&#8201;&#8212;&#8201;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, &lt;a href=&quot;https://sketchfab.com/3d-models/ftm-0970f30574d047b1976ba0aa6f2ef855&quot; class=&quot;bare&quot;&gt;https://sketchfab.com/3d-models/ftm-0970f30574d047b1976ba0aa6f2ef855&lt;/a&gt; by Luis Fernandez, &lt;a href=&quot;https://sketchfab.com/luyssport&quot; class=&quot;bare&quot;&gt;https://sketchfab.com/luyssport&lt;/a&gt;"><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, &lt;a href=&quot;https://sketchfab.com/3d-models/ftm-0970f30574d047b1976ba0aa6f2ef855&quot; class=&quot;bare&quot;&gt;https://sketchfab.com/3d-models/ftm-0970f30574d047b1976ba0aa6f2ef855&lt;/a&gt; by Luis Fernandez, &lt;a href=&quot;https://sketchfab.com/luyssport&quot; class=&quot;bare&quot;&gt;https://sketchfab.com/luyssport&lt;/a&gt;"
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), &lt;a href=&quot;https://sketchfab.com/3d-models/invincible-mark-grayson-698c1106da924ab1a26392247e697f79&quot; class=&quot;bare&quot;&gt;https://sketchfab.com/3d-models/invincible-mark-grayson-698c1106da924ab1a26392247e697f79&lt;/a&gt; , 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), &lt;a href=&quot;https://sketchfab.com/3d-models/invincible-mark-grayson-698c1106da924ab1a26392247e697f79&quot; class=&quot;bare&quot;&gt;https://sketchfab.com/3d-models/invincible-mark-grayson-698c1106da924ab1a26392247e697f79&lt;/a&gt; , 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, &lt;a href=&quot;https://sketchfab.com/3d-models/pony-cartoon-885d9f60b3a9429bb4077cfac5653cf9&quot; class=&quot;bare&quot;&gt;https://sketchfab.com/3d-models/pony-cartoon-885d9f60b3a9429bb4077cfac5653cf9&lt;/a&gt; Pony Cartoon by Slava Z., &lt;a href=&quot;https://sketchfab.com/3d-models/free-1975-porsche-911-930-turbo-8568d9d14a994b9cae59499f0dbed21e&quot; class=&quot;bare&quot;&gt;https://sketchfab.com/3d-models/free-1975-porsche-911-930-turbo-8568d9d14a994b9cae59499f0dbed21e&lt;/a&gt; 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, &lt;a href=&quot;https://sketchfab.com/3d-models/pony-cartoon-885d9f60b3a9429bb4077cfac5653cf9&quot; class=&quot;bare&quot;&gt;https://sketchfab.com/3d-models/pony-cartoon-885d9f60b3a9429bb4077cfac5653cf9&lt;/a&gt; Pony Cartoon by Slava Z., &lt;a href=&quot;https://sketchfab.com/3d-models/free-1975-porsche-911-930-turbo-8568d9d14a994b9cae59499f0dbed21e&quot; class=&quot;bare&quot;&gt;https://sketchfab.com/3d-models/free-1975-porsche-911-930-turbo-8568d9d14a994b9cae59499f0dbed21e&lt;/a&gt; 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="&quot;Little Things&quot; 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="&quot;Little Things&quot; 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&#8230;&#8203;), 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="&quot;Not Quake&quot; 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="&quot;Not Quake&quot; 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 &quot;Strategy Game&quot; 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 &quot;Strategy Game&quot; 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 &quot;Strategy Game&quot; 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 &quot;Strategy Game&quot; 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 &quot;Strategy Game&quot; 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 &quot;Strategy Game&quot; 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:/&#8230;&#8203;</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&#8201;&#8212;&#8201;this results in simplicity (it&#8217;s easy to contribute) and speed.</p>
1754</li>
1755<li>
1756<p>Fast execution. It&#8217;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&#8217;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.