Random Stuff

MetaTrader History ToolKit
My ATC2012 EA
Heinz Engine
Honda Steed Exhaust Mod
3DS Retro Game Gallery 
Frypan-Lamp Biquad Antenna
HTPC 001
Aerospace AL CPU Cooler
PHP Pager
Developer's Notes

Heinz Engine

Beer or Die

[2019.01.23] Ping: Just reporting the last progress. Working right now in the MetaResource files, GUI control library, Vulkan driver fixes and the longest TODO list ever.

Heinz Engine is my own custom game and multimedia engine made from scratch with notepad.

This project was my first dive into modern game development, multimedia programming and computer graphics. It has been a constant hobby ever since. More fun than playing games is creating them.

Although it is named as a game engine, it has proven to be a better GUI library for applications with custom controls and badass looking.

Note that this is not an open project, there won't be any public release. This is just a showcase to display what a random dude does in his free time as a hobby (some people collect baseball cards, others have book discussion clubs...i craft software tools).

Heinz Engine v1.1 (Latest Version)

This version is the next iteration of my project. It features a major code review and rewrite, a more robust and yet modular architecture, updated drivers for the latest hardware and APIs, more plugins, huge boost on stability, more biased towards flexibility and finally improved performance.
This next release is currently under development, it will be ready for production quality usage and i wish to publish a couple of demos. If the time is right and i have the capital, i'll move a bit from multimedia apps and make a proper game.

In addition to the previous version, this is what has changed:

  • All over again. I started from scratch but carrying all the experience from the previous work. A reborn project aimed at being an improved version of itself.
  • Rewritten with C++11. It was a hard decision to move away from D, i had my differences with the spec 2 and wanted as well to make my engine more portable across other devices.
  • New engine core, more robust than ever.
  • Multithreaded model with experimental thread safety mechanisms (those will be disabled for release).
  • Improved modular arquitecture with better plugin support. Plugins are now more efficient memory wise.
  • New graphic drivers supporting: D3D11 (June 2010 SDK), D3D11 (latest SDK) and even the latest APIs such as D3D12 and Vulkan 1.0 to power the next generation applications.
  • "One code to rule them all". Code once then run in any graphics API without recompiling.
  • New mixed immediate and deferred rendering modes to reduce resource usage and take advantage of multiple threads.
  • The OpenGL 4 driver has been deprecated, the single threaded context was not in par with the new multithreaded model of the engine.
  • Runs under Microsoft Windows OS and getting ready for FreeBSD and some Linux kernel based OS (support for gaming consoles is planned for the future).
  • Extensible GUI library that provides an homogenous runtime experience across all implementations.
  • New custom string and char classes for a more transparent experience while working with UTF-8 encoded streams. Provides interop with STL strings.
  • New configuration manager class to flexibly manage program settings and options. It can easily export/import values to/from XML, Windows registry and any other tree-like structure.
  • New viewport interface to seamlessly integrate with many host platforms.
  • [Currently under work in 2019] Redesigned "MetaResource" file format: This feature is a deployment solution included with the engine (it has been since version 1.0). It allows to pack all the resources and assets (text, sound files, texture files, model files, level data, custom binary data, etc...) into a single resource file. This resource file format provides a smart and fast way to design a multi-language program with the introduction of dynamic polymorphism concepts like Resource Inheritance, Resource Overriding and Resource Aliasing. A page has been setup to preview this sub-project right here.
  • User input is now handled by the core engine instead of an input driver.
  • Redesigned audio system with rewritten audio drivers, they are stable now.
  • The DirectSound driver has been deprecated in favor of XAudio2.7 and XAudio2.9.
  • New image plugins to support arbitrary texture formats.
  • Experimental support for "Deep Color" 16bpc (under work).
  • Built-in font support (under work).
  • The previous version was focused on "grouping, sorting and batching" for achieving high performance. This version has broken that model to focus more on flexibility while modern hardware still provides excellent performance.
  • Overall more efficient and better performer than previous version.
  • TODO...

Heinz Engine v1.0

The first version was a blind experiment that i did not use for public demos except for a custom CV i published years ago which had too many random crashes (that's what happens when you let loose threads and allow them to go crazy). This version was mainly used for my personal GUI programs and was also used as what i call a "ProtoSoft" or "CrashBoard" (electronics engineers have ProtoBoards): A sandbox to develop, experiment and crash software/hardware features.

  • Created with the mighty D Programming Language.
  • Compatible with C++ and other languages (through C ABI compatibility).
  • Static library for D with multiple utility members.
  • Modular architecture supporting drivers and plugins.
  • Native UTF-8 strings (actually that's a built-in D feature).
  • Custom made resource file format supporting encryption and compression.
  • Drivers of diverse nature:
    • Graphics: Direct3D and OpenGL.
    • Audio: DirectSound, XAudio2, OpenAL and Null Audio (emulated sound).
    • Input: Win32 Input and DirectInput.
  • Multiple audio plugins: PCM Wav, OGG-Vorbis and FLAC.
  • Instance based audio system: Allows efficient management of multiple audio buffers from a single source.
  • Heinz Z-Techniques: Smart sorting and grouping that allows the graphic device to perform the z-test in an entire geometry rather than a per-pixel basis.
  • Incredible GUI framework with lots of user controls written from scratch.
  • Event driven communication (slot/signal): Subscribed handlers are notified only once when the event occurs, in contrast of polling 10.000.000 times a frame just to discover the event hasn't happened yet.
  • Dynamic Frame and Dynamic Rendering to keep resource usage low, system cool and energy efficient.
  • Proven high performance and efficiency.