Integration with Vampyre Imaging Library, new example image_display to test image loading speed and format support

Posted on

Castle Game Engine example - image_display
examples/images_videos/image_display speed test

We now can use Vampyre Imaging Library to load and save images in various formats. After some testing, I’m very impressed with how easy it is to use Vampyre, and we are already:

  • Using it with Delphi by default (no need to do anything).

  • Vampyre source code is bundled with CGE, so you don’t need to set up / download anything extra. Vampyre is just automatically used under the hood by CGE to load/save some image formats. It is in src/vampyre_imaginglib of CGE, and CGE build tool automatically passes paths to it when building CGE applications.

For FPC:

I have also tested using Vampyre with FPC, and our build tool already contains the necessary paths. Every FPC user of CGE can just define USE_VAMPYRE_IMAGING symbol to use it. There are a number of ways to define it, the advised is to define it in CastleEngineManifest.xml, like here.

In the near future we will likely just use Vampyre with FPC by default, so the need to define USE_VAMPYRE_IMAGING is just a temporary thing. We just need more testing, with various FPC versions and platforms (see lower for examples).

In the more distant future, we may also remove the code to use FpImage with FPC, even as a fallback, since Vampyre seems just better than FpImage in every way.

Advantages of using Vampyre:

  • Vampyre Imaging Library is cross-platform.

  • Works with both FPC and Delphi. Unlike FPC-specific FpImage or Delphi-specific PngImage (and other stuff in Delphi Vcl.Imaging).

  • Supports many image formats, both reading and writing. It even supports a bit more than FpImage, e.g. we added now loading TIFF, JPEG 2000, XPM without any extra tools.

  • It has really good and simple API. Almost entire CGE + Vampyre integration code is in this include file.

  • It is well documented on https://imaginglib.sourceforge.io/ , with manual and reference.

  • It is efficient. Unlike e.g. FpImage from FPC — which turned out to be very inefficient when it comes e.g. to PNG image reading (despite our efforts to make it fast, using TFPCompactImgRGBA8Bit, using format detection in InternalDetectClassPNG).

  • It doesn’t require any external libraries. Unlike LibPng approach in CGE.

Help us test!

I’m eager to hear about your tests of Vampyre on various platforms, with various compilers, with your images.

You can use e.g. our castle-view-image (image viewer) for easy testing. It compiles now with both FPC and Delphi.

You can also use a new cross-platform example: examples/images_videos/image_display . This loads the image in a number of formats (making sure we support them all), and can perform speed testing – to compare loading times of various libraries, so you can verify the speed of Vampyre vs FpImage vs LibPng yourself.

What about LibPng, DDS, KTX?

Vampyre is still a bit slower for reading PNGs than LibPng (about 2x slower on Linux/x86_64, which is anyway better than FpImage that was 4x slower), so we will keep relying on LibPng for PNG. Still, Vampyre is a much better fallback than FpImage when LibPng will be missing.

We may rely on Vampyre for some formats that are currently built-in in CGE code, too. This includes BMP, RGBE, PPM.

We will likely keep our own CGE code for loading DDS and KTX though. (Vampyre can handle DDS. But we want DDS and KTX to go though a similar code path in CGE, and we want to efficiently use all their features — cubemaps, texture compression, 3d textures, mipmaps.)

Comments on the forum (2) ➤

Big merge: Delphi compatibility, integration with Vampyre Imaging Library, many new/upgraded examples, inspector improvements, more

Posted on

Castle Game Engine example - multiple_viewports
Castle Game Engine example - Castle Game Engine example - shader_override
Castle Game Engine example - image_display
Castle Game Engine example - listen_on_x3d_events
Castle Game Engine example - use_designed_curve

I have just merged a giant pull request to CGE with 334 commits! This is a big work from Andrzej Kilijański and me (Michalis Kamburelis) from the last 3.5 months, and it includes:

Edit: I initially wrote that it is “250 commits”, not 334. It turns out that GitHub PR interface just shows only 250 commits, but there are more! 🙂

Comments on the forum ➤

Inspect your game hierarchy and logs at runtime — just press F8

Posted on

Castle Game Engine Inspector - Mousey glTF animation
Castle Game Engine Inspector - Platformer
Castle Game Engine Inspector - Escape from the Universe

Initial version of this post said we use F12. We had to change this shortcut to F8 though, because when running the application in Delphi debugger on Windows — F12 breaks the process (this is a feature of Windows+Delphi…).

I’m happy to announce a feature that may forever change how you use Castle Game Engine! Simply recompile your game with the latest engine version, press F8 and behold… a powerful tool to see your log and hierarchy of objects in the game.

Watch a presentation:

Yes, this looks effectively like a (very minimalistic) editor-at-runtime. It is cross-platform and automatically available for all your games. Invoke it at any point, and inspect (soon: even edit) the visible CGE objects (UI, transformations, scenes…).

Features:

  • View the hierarchy of TCastleUserInterface and TCastleTransform at runtime (just like in CGE editor)

  • Select any component (by picking it from hierarchy, or hovering mouse over it with various “Auto-Select” options) to see its properties, updated in real-time

  • View logs (each time you press F8, we show 10 last logs, and we’ll collect any more logs that will be submitted while the inspector is open)

  • All panels (hierarchy, properties, profiler, log) can be hidden and shown independently

  • Inspector opacity can be controlled, to better see your game content underneath. The current opacity and panels are remembered when you toggle inspector by F8 repeatedly.

  • Powerful frame profiler shows where do you spend most of the time each frame: update, render, physics, swap. It also shows FPS history.

  • The key to invoke the inspector can be configured, you can also make it available in the release mode. By default, we assign {$ifdef DEBUG} keyF8 {$else} keyNone {$endif}.

Note: long time ago I had a plan for a different approach to “editor at runtime” : compile with CASTLE_WINDOW_LCL backend, and add LCL UI — reused between “editor at runtime” and actual CGE editor. Downside: it would work only on desktops. For Delphi devs, it would also mean that we need to compile the game with FPC too. Upside: It would be easier to support 100% of editor features. What is the ideal approach? We’ll see 🙂 For now we develop CGE editor using LCL, and in-game inspector using CGE UI, and we’ll see how these 2 approaches converge.

Comments on the forum ➤

Various engine improvements – editing collections in editor, Tiled fix for multiple tilesets, API simplifications

Posted on

Editing collection in CGE editor
Editing collection in CGE editor
Tiled Map Viewer
  1. Thanks to Trung Le (Kagamma), you can now use collection editors in Castle Game Engine Editor just like in Lazarus.

    This allows to visually edit e.g. particle effect anchors in cge-3d-particle-emitter or a TDbf.FieldDefs from castle-db-aware-controls.

  2. Thanks to Matthias (Free Pascal meets SDL), we have an important Tiled bug fixed — in case you used multiple tilesets within one Tiled map. Testcases are within examples/tiled/map_viewer data.

  3. On our quest of simplifying CGE API, we recently removed a useless TInputListener class (it is now a deprecated alias for TCastleUserInterface) and the new non-deprecated name for TUIContainer is now TCastleContainer.

  4. view3dscene supports a new command-line option --no-x3d-extensions if you’d like to convert models from various formats (e.g. glTF) to X3D without any Castle Game Engine X3D extensions. While it may make the models a bit less functional in CGE, it makes them more readily useful with other X3D viewers like X3DOM.

  5. During the development of The Unholy Society for iOS, we noticed a weirdness with Release events on iOS, which stem from how iOS reports touchesEnded / touchesCancelled events. There’s nothing we can do about them (and every iOS application suffers from them, as far as we can tell, regardless of the engine/framework used to make it), so they are just documented now at iOS – Known Problems.

Comments on the forum ➤

Presentation about Castle Game Engine from DelphiCon 2021

Posted on

Our presentation about Castle Game Engine from DelphiCon this week is now available to watch on YouTube! I highly advise watching this to every CGE developer — regardless of your favorite Pascal compiler/IDE. I describe the engine features, and go into a very practical session where I modify one of our templates, showing a number of basic CGE features. I hope you enjoy this!

Comments on the forum ➤

Big Delphi port progress, beta download, watch my presentation at DelphiCon

Posted on

Castle Game Engine + Delphi: terrain example
Castle Game Engine + Delphi: compiler preferences
Castle Game Engine + Delphi: IDE preferences
Castle Game Engine + Delphi: 2D game
Castle Game Engine + Delphi: 2D game with log visible
Castle Game Engine + Delphi: play_animations demo
Castle Game Engine + Delphi: play_animations demo with glTF
Castle Game Engine + Delphi: JPEG by Vampyre Imaging Library

All Delphi users: Enjoy now easy link to download Castle Game Engine with Delphi support (beta version) on our main page!

And be sure to watch our presentation at DelphiCon 2021 today! (Update: this has already happened. Recorded video: https://www.youtube.com/watch?v=6JfFxnZO4Jc ).

The development of Delphi port is now happening within PR #350. We have almost everything in CGE working now smoothly in Delphi!

Works:

Some examples that compile and work with Delphi (as well as FPC of course):

  • examples/user_interface/state_events
  • examples/3d_rendering_processing/collisions
  • examples/mobile/simple_3d_demo/
  • examples/3d_rendering_processing/view_3d_model_basic/
  • examples/3d_rendering_processing/view_3d_model_advanced/ (use this to load any model or image from https://github.com/castle-engine/demo-models ! )
  • examples/animations/play_animation
  • all 4 templates created by “New Project” from CGE editor
  • examples/terrain
  • examples/physics/*
  • examples/fps_game

(Soon, all examples will follow.)

For more information, consult also past news about Delphi: 1, 2.

This is a result of large work by Andrzej Kilijański and Michalis since many weeks. Please support us, and sponsor the development of next CGE features by donating on Patreon.

Comments on the forum ➤

Pepper & Carrot – 3D platformer prototype

Posted on

2021-11-07 04_19_45-Greenshot
2021-11-07 04_23_40-Greenshot
2021-11-07 04_24_29-Greenshot
2021-11-07 04_25_23-Greenshot
2021-11-07 04_23_14-Greenshot

We’re happy to present a new 3D platformer prototype made in Castle Game Engine – Pepper and the Potion of Jumping.

You can check out the source code and build it yourself from Pepper and the Potion of Jumping.

Most levels include collecting gems (currently yellow spheres) until you have enough to continue. There’s also a swimming level, 2 flying levels, and a couple of levels where you have to throw snowballs at Saffron, Shichimi, and Coriander. The final level is a ‘boss fight’ (kind of) against 3 dragons and a giant dragon head. Throw snowballs at them to win.

Credits go to ultidonki from our forum — thank you! Please post any feedback in the related forum thread.

Comments on the forum ➤

Foxy Misfortunes – top-down shooter made in Castle Game Engine

Posted on

2021-11-04-233136_1366x768_scrot
screenshot_foxy-misfortunes_384591856225
screenshot_foxy-misfortunes_384591894574
2021-11-04-232609_1366x768_scrot

 

Foxy Misfortunes is a simple top-down shooter with a funny NSFW theme. Download it for Windows, Linux and Android from Foxy Misfortunes (itch.io).

It’s a free and open source game done using Castle Game Engine by Eugene Loza. The source code is on Foxy Misfortunes (GitLab).

In the game you control Foxy – a fox girl who decided to go on adventure collecting golden coins and zapping enemies with lighting bolts, but it quickly turns out that her clothes are her hit-points. Warning: the game contains some adult-only elements, such as cartoon nudity (optional censored mode is available) and mildly suggestive themes.

Comments on the forum ➤

Invoke Visual Studio Code or Delphi from CGE editor

Posted on

Castle Game Engine editor preferences
Visual Studio Code editing Castle Game Engine  program

You can now easily choose to invoke Visual Studio Code or Delphi from the Castle Game Engine Editor preferences window.

This is in addition to the previous options to invoke Lazarus IDE or a custom editor (where you can easily configure e.g. Emacs, my editor of choice 🙂 ).

By default we have Autodetect, which selects the first of Lazarus, Delphi or Visual Studio Code — whichever we find on your system.

Visual Studio Code is a modern cross-platform IDE for various programming languages and frameworks. You can use it with Object Pascal and Castle Game Engine instantly.

Tip: Did you know there’s also a web version of VS Code, easily available? Just go to any repository on GitHub (like castle-engine) and press . (dot) on your keyboard. Woah — a full-featured editor running just in your browser! And it can sync settings. And it is integrated with GIT and GitHub — if you edit a repo where you’re not a member, it can easily create a PR from your edits. I recently listened to GitHub Universe 2021 talks, a lot of interesting content from GitHub, and they integrate new features into VS Code intensively.

The Delphi integration with CGE editor is not a final version — it will be better once we use DDE for inter-process communication to avoid opening new Delphi window each time. More on Delphi progress in later post.

Comments on the forum ➤

Building for Android x86

Posted on

Application running in Android  emulator (x86)
Application running in Android  emulator (x86)
Application running in Android  virtual machine (x86_64)
Application running in Android  virtual machine (x86_64)

The usual Android CPU, used by most of physical Android devices, is Arm (32-bit or 64-bit). But sometimes it makes sense to build for Android x86 CPUs (32-bit x86, 64-bit x86_64). The main use is to run such applications in emulators and virtual machines, like emulators provided in Android SDK or a virtual machine installed using ISO from Android-x86 project.

To do this, build Android APK using our build tool like this:

castle-engine package --os=android --cpu=x86_64

You can add --fast and/or --mode=debug if you want.

Then just transfer the resulting APK inside the Android machine.

If you use an emulator installed by Android AVD Manager, and visible on the adb devices list, you can even install and run (showing logs from the device) using the standard install and run commands of our build tool, like this:

castle-engine --os=android --cpu=x86_64 install
castle-engine --os=android --cpu=x86_64 run

Note: Setting up the emulator using command-line AVD Manager was unexpectedly hard, due to an enormous amount of questions I had to answer about the emulated machine. I recommend to use GUI to create new emulators instead, run Android Studio and from More Actions choose AVD Manager.

Note: The behavior of command castle-engine package --target=android, which you can use to create an APK for a “normal” Android device, has not changed. It still builds only for Arm (32-bit and 64-bit, aka Aarch64), assuming these are systems used on actual devices. Though we’re open to change this some day (if usage of Android x86 rises, and will be useful for more than just “developers testing apps in virtual machines”).

This has already somewhat worked in the past, but now we made it better:

  1. Instructions to setup environment for this are adjusted on Android docs and Android FAQ. Following the stuff related to Android/x86 is completely optional, so if you have a working Android setup and are not interested in x86 support, just ignore it.

  2. Our support libraries are now packaged with x86/x86_64 variants too:

    The precompiled libraries are inside CGE services on Android. So you don’t need to do anything, just package for Android using the build tool commands shown above, and it will add the required libraries.

Comments on the forum ➤