![]() |
![]() |
![]() |
Presenting a big batch of engine improvements done last ~month. Lots of small things. Everyone, pick what you like 🙂 Upgrade to the latest engine version and enjoy them all!
If you like what you see, we appreciate your support on Patreon (we also have other ways to donate).
- We added a new documentation page Window size and fullscreen. Nicely explains how to change window size, fullscreen mode, anti-aliasing, and even (not recommended, we explain why) the OS-wide screen resolution.
This is also linked from the new projects’
gameinitialize.pas
template code. Previous template placed there a long comment — now it’s just a short concise comment with a link to the above page. -
Added
TCastleAbstractPrimitive.TextureScale
property, useful to easily scale the texture (in descendants likeTCastlePlane
,TCastleBox
). -
TCastleImageTransform
has new properties to make it lit and configure other options:TCastleImageTransform.Material
,TCastleImageTransform.UrlNormalMap
,TCastleImageTransform.RenderOptions
. Details:Material
, can bepmPhysical
orpmPhong
or (as default, backward-compatible)pmUnlit
.-
UrlNormalMap
allows to specify a normal map (for bump mapping). -
RenderOptions
allow to specify some rendering details. E.g. adjust bump mapping algorithm byRenderOptions.BumpMapping
is useful.
See this forum thread that caused these improvements and contains some testcases.
And yes, we are fully aware that
TCastleImageTransform
andTCastlePlane
features bring them closer and closer to each other. They both can display a textured rectangle in 3D or 2D, be lit or unlit, support various display options. For now, we think it makes sense to have both components, as they start from a different approach to sizing — it’s whether “image size determines the geometry size” (TCastleImageTransform
) or “image is just an optional decoration, and never affects the geometry size” (TCastlePlane
). It seems combining all their features would result in a complicated API… but we will keep an eye on this. -
We have enabled using cubemaps and 3D textures (nodes like
TImageTexture3D
,ImageCubeMapTexture
) to be used in any material “texture slot”. For example, they can be used to define aTPhysicalMaterialNode.EmissiveTexture
,TMaterialNode.SpecularTexture
and more now.Previously, some of the material texture slots supported only 2D textures and the 3D / cubemaps were allowed only in the “main” slot (which was:
TPhysicalMaterialNode.BaseTexture
,TMaterialNode.DiffuseTexture
,TUnlitMaterialNode.EmissiveTexture
). This limitation no longer exists, all material slots allow 3D and cubemaps.Note: There is still some special code for the “main” slots, so e.g. ShaderTexture is still not supported in all slots. With time, we want to get rid of all such constraints, feel welcome to submit issues / ping us about it.
See this issue for sample testcase.
-
We allow customizing the
proposed_unit_prefix
in project settings. This makes sense if you don’t want your unit names to start withGame
(e.g. because you’re not making a game). -
We have improved physics interaction with
TCastleTransformReference
. We warn when collider / bodies are inside. We calculate bounding box properly when collider is atTCastleTransformReference
.See this forum thread for some notes and tests that caused this.
-
Our
pasls
(used for the code completion by our VS Code extension) has been improved:- Handles better “Untitled…” URLs of new files, doesn’t cause a flood of useless notifications.
- Supports
castle-pasls-paths.txt
to easier add paths.
- I spend some time with Valgrind optimizing a few engine low-level operations. This was fruitful. Per-frame work (rendering) is in one testcase now 0.579 fraction of the old one (so it’s almost ~2x faster).
For this work, I used the “many cubes” testcase on GitHub – michaliskambi/many-cubes which followed from the “Drawing Many Cubes Faster” forum thread.
The gains do not translate to all possible applications that easily, so don’t expect a 2x FPS increase in your applications now… but maybe you will notice some speedup 🙂 So give new engine a try, let us know (e.g. in the forum thread) about your tests and speed. You’re also welcome to provide us “testcases to optimize” (though try to keep them real-life, not contrived :). This helps, when I can just run profiler on some something concrete, and advise what to adjust (in your code and/or in the engine).
-
Moving / resizing window (
TCastleWindow
) on WinAPI is now fixed to be smooth.For details what we do, what was wrong, and how we fixed it see this GitHub issue.
-
We have internally a nice WinAPI messages debugging feature. Compile with
CASTLE_DEBUG_WINAPI_MESSAGES
symbol defined. -
We had to bump requirements of our Raspberry Pi 32-bit (Arm) builds. They require now Bookworm OS version. This matches now builds on all other systems (Linux on regular x86_64, and Raspberry Pi 64-bit (Aarch64)).
Before 2025-06-13, we provided binaries for 32-bit Raspberry Pi (Arm CPU) in a version compatible with older GLIBC, including the one in Debian’s
bullseye
(to support older Raspberry Pi 4 32-bit installations). However, this gets hard, as DietPi removed some old images which we relied on, by this GHA action. We migrated to use official images from raspberrypi.org. -
We expose now
TX3DNode.WaitForRelease
andNodeRelease
, simpler and with more obvious names alternatives toTX3DNode.KeepExistingBegin
,TX3DNode.KeepExistingEnd
,FreeIfUnusedAndNil
. -
Fixes to castle-editor-portable editing 2D game template with Spine, and more general:
DataDirectoryInformation
andApplicationDataOverride
interaction fixed. -
To improve the comfort of cloning from GIT the engine, we now limit our paths to 130 (previously, our longest path reached 165). This decreases changes you will run into trouble on Windows, with Windows long paths or GIT on Windows long paths disabled.
See resources like How To Fix ‘Filename too long’ Errors in Git on Windows for details, linked also from our compiling from sources. These problems can be avoided by better Windows and GIT configuration, but it’s not default, so we improved the engine to minimize the chances you run into this.
Start the discussion at Castle Game Engine Forum