As there haven't been many (or indeed any) updates to DBPro since it (or rather the internal version pieced together to support GameGuru) went open source about a year ago, I am pleased to present DBPro 9Ex.
This is a pre-built version of DBPro that fixes various issues inherent in the open source'd version (
available here on GitHub) and adds some extra features on top. As the name hints, it has also had it's DirectX version updated from 9.0c to 9Ex, which offers better interoperability with the Windows Desktop Manager on Windows Vista and later (while still working the same as 9.0c on Windows XP), enforces better memory management and potentially improves rendering efficiency a bit.
If there is enough interest and bug reports and/or feature requests I will try to keep updating it, though my main project will remain my
Ziggurat Engine.
So, what benefits does this version offer compared to the vanilla GitHub version, or the old version 1.7.6 or RC 1.7.7?
Bug fixes
This is not a complete list but rather the major ones.

Fixed compatibility with most (hopefully all? Let me know if you find any that aren't working!) third party plugins.

Fixed a bug where the compiler would experience a stack overflow and crash for large sources that contained too many labels and/or functions.

Fixed various memory leaks present in the DBPro source.

Removed all references to GameGuru and its documentation / website from error messages and replaced them with the standard DBPro ones, ie. "image does not exist at line xxx" and so on.

Fixed a bug where multisampling was broken and would cause a crash if set through SET DISPLAY MODE.

Fixed a bug where the icon of compiled executables could not be changed.

Included media now works as intended and can be loaded at runtime.

Various other fixes to restore standard DBPro behaviour that was altered for GameGuru, such as programs starting with backdrop on and sync off instead of the opposite values and similar.
New features

Improved resource management will free up more RAM and potentially increase rendering times a bit (depends on your hardware and program complexity).

Display modes can be changed during runtime without having to reload all video memory resources. This includes the possibility to tab in and out of a fullscreen application without having to reload media. (Requires Windows Vista or higher).

Improved compilation times (may not apply if using multiple and/or slow third party precompilers).

Supports sharing images with my DX11 Plugin, ie. you can render to an image from DX11 and use it as a texture in DX9 or the other way around, or do more advanced stuff like render an image normally in DBPro, then use the DX11 Plugin to utilize compute shading, and then use the final result in standard DBPro again. (This feature will only be available starting with the next release of my DX11 plugin (version 0.5), but the necessary groundwork is present in this version of the DBPro core library).

The arbitrary limit of at most 1000 exported commands per third party library has been removed and custom plugins can now have however many functions they please available to DBPro (there is a hard limit of 32767 exported functions per dll imposed by Windows however).

Supports third-party precompilers. See below for more information regarding this.
Differences
There are a few small differences between this version and DBPro 1.7+ / the GitHub version that one should be aware of.
There may also be more such differences imposed by the upgrade from DX9.0c to DX9Ex that have yet to be discovered. The currently known ones are as follows:

When setting the
BorderColor attribute from a shader technique (.fx) file, this now expects a
DWORD colour rather than a
float4. This is due to a later version of the Effects Framework being used than with earlier DBPro versions.
As such your shaders may not be working as intended until you change this setting. Please refer to the following table for details on how the syntaxes look:
// The arguments are floats in the 0..1 range. This was used by previous DBPro versions, but cannot be used with DBPro 9Ex.
BorderColor = float4(red, green, blue, alpha);
// This is the proper way to set a border colour shader attribute with DBPro 9Ex.
// The channel values are bytes in hexadecimal notation ranging from 0x00 to 0xff, where 0x00 = 0.0 and 0xff = 1.0.
BorderColor = 0xaarrggbb;

The bone palette size for meshes has been reduced from 256 to 255 bones per mesh on the CPU side. This is largely irrelevant as shaders only support up to 60 bones per mesh in any case.

CharacterCreator model support has been removed. This can be reintroduced if requested, but it appears to be GameGuru specific and just a waste of space in normal DBPro projects. There also is/was no functionality built into the GitHub version of DBPro that supports actually creating CharacterCreator models from DBPro.
Precompiler
DBPro 9Ex comes with a built-in system for adding and chaining up third-party precompilers.
A precompiler is a dll that exports some or all of the following functions:
/**
* This function must be exported by all legal precompilers.
* It is used to receive data from the compiler process that are necessary for the
* static library (Precompiler.lib) to function.
*
* @param void* pData - The data received from the compiler module. Must be forwarded to Precompiler.lib using dbpc::SetInternalData().
**/
__declspec(dllexport) void ReceiveCompilerData(void *pData) {
// This needs to be forwarded to the internal implementation of Precompiler.lib.
// We can store it for our own use as well from here if desired.
dbpc::SetInternalData(pData);
}
/**
* This is the main function of the precompiler.
* It will receive a pointer to a dbpc::Project instance that contains the full source¹ of the project being compiled.
* By using the member functions exposed by the Project instance, the source can be altered (added to, removed from or
* otherwise changed) before it gets processed by the compiler.
* You must not manually delete the Project or any of its members; instead use the provided interface to insert or
* remove source code.
*
* (¹) Some preprocessing is carried out prior to any third party precompilers being invoked, namely:
* • All #include directives are resolved and the included source files are added as Source instances to the Project instance.
* The "#include ...." statements are removed from the source that is received here.
* • All comments and empty lines are removed from the sources.
* As such you won't see any comments from a precompiler; nor should a precompiler insert its own comments or #include directives.
* A precompiler that wants to include an external file can do so through the Project::AddSource() member function.
*
* @param Project* pProject - The project instance that is being precompiled. Any changes made to this will be carried on to the
* next precompiler in line (if any) and eventually will be processed by the compiler itself.
* @return bool - If there was an error during precompilation, «false» should be returned.
* This will stop the compilation process and the user should ideally be prompted as to what is wrong such that
* he can change his source and try again.
* If the precompilation finishes successfully, «true» should be returned.
**/
__declspec(dllexport) bool Precompile(dbpc::Project *pProject) {
// Step through all sources and all of their lines
for(size_t s = 0; s < pProject->GetNumSources(); s++) {
dbpc::Source *pSource = pProject->GetSource(s);
dbpc::Line *pLine = pSource->GetFirstLine();
while(pLine) {
// Can check the line contents here and change it, remove the line, insert new lines, and so on.
// See the header files in Compiler/Precompiler/bin/include for more details on the available functionality.
pLine = pLine->GetNext();
}
}
return true;
}
/**
* This is an optional function.
* When exported, its returned string will be used when displaying information pertaining to this precompiler.
* At the current time this is only employed in error messages.
* If a precompiler doesn't export this function, the file name will be used instead in any situations where
* the particular precompiler is referenced.
*
* @return const char* - The name of the precompiler
**/
__declspec(dllexport) const char* GetPrecompilerName() {
return "Example precompiler";
}
/**
* This is another optional function.
* When exported, it sets the priority value that will be used to determine in what order to invoke multiple
* precompilers. A lower value means the precompiler will be run earlier, while a higher value means it will
* be run later. If two or more precompilers share the same priority value their order among eachothers is
* undefined, but they will otherwise appear at the "correct" place determined by said priority value among
* any other precompilers having different values.
* If this function is not exported, a priority value of zero will be used for the precompiler.
* Take note that the priority value can be negative in order to place it before any such zero-priority
* precompilers.
*
* @return int - The priority value of the precompiler
**/
__declspec(dllexport) int GetPrecompilerPriority() {
// This precompiler will be run after any precompilers with a priority
// value of 0 or below, but before any with a priority of 2 or higher
return 1;
}
Precompilers offer a way to alter the source code before it gets sent to the compiler and facilitates certain functionality that cannot reasonably be implemented in a plugin, such as macros or line number reporting to third party dll's.
If you want to write a precompiler there is a static library to link against, as well as a pair of header files included in the download under the Compiler\Precompiler\bin directory. Please refer to the above snippet for the basic functions that your precompiler has to / can export. An open source precompiler example project may be supplied at a later date.
Download
Click here to download DBPro 9Ex.
The above link will always point to the latest version.
Installation
Simply unpack the archive to your DarkBASIC Professional installation directory, overwriting any conflicting files.
You may want to back your original DBPro installation files up first!
There are no additional help or keyword files in this release as it mainly serves to fix and improve on the original DBPro to which you are assumed to already have documentation.
If not, you can download it from the
GitHub repository here. Simply install that and overwrite any conflicting files with the ones in the DBPro 9Ex archive.
The new features do not come with new documentation as they are either just updates to previously existing (and documented) functionality or it is handled internally / automatically and not through third party plugins.
Donations
DBPro 9Ex is free to download and use as you please. A mention in the credits of anything you create using it would be nice, but is not required.
If you like my work and would like to contribute towards its future development you can do so through this
Patreon page. Or if you prefer, you can send me some money over
PayPal to

. The Patreon page offers some pledge rewards geared towards my Ziggurat Engine where you can get early alpha testing access to new releases, get an option to disable the splash screen and version watermark, suggest a command or get the product for free once version 1 is released. These same rewards can be agreed upon through PayPal contributions if you contact me.
While I would of course appreciate such contributions, which will first and foremost be invested in obtaining some more up-to-date hardware to further my work on the Ziggurat Engine, it is by no means a requirement. Seeing some new life breathed into the DBPro community would be enough of a reward in itself.
Changelog
########################################
# Build 1.0.0.1 on 2016-10-01
########################################
# § Fixed a bug where the compiler could crash when trying to release allocated memory.
# § Third party libraries are no longer loaded as executable modules during compilation;
# this prevents them from raising errors about missing external files that will not be
# present during the compilation process.
# § Fixed a bug where using certain shader functionality caused a crash when applying the effect.
# § Added a new function, USE LEGACY SHADER COMPILER, for using the less strict shader compiler
# employed by earlier DBPro versions. This allows to compile certain shaders that don't fully
# adhere to the strict HLSL standard without warnings. It is however adviced that you instead
# update any shaders to adhere to the stricter rules imposed by the newer shader compiler.
########################################
# Build 1.0.0.2 on 2016-10-05
########################################
# § Fixed a bug where the attached SC_Collision.dll was using an older mesh format left over from
# pre-release testing, resulting in crashes if trying to use it.
# § The issue where compilation would fail for whitespace-separated comments following an EXIT
# instruction has been resolved.
# § Added an optional setting to have the precompiler use the IDE-supplied full source dump rather
# than rebuild this from the source files. Add the following to your Setup.ini file (in the
# compiler folder) to control this setting:
# [PRECOMPILER]
# UseIDESourceDump=Yes # Or set it to "No" to disable. Will be disabled by default.
# This setting is disabled by default so unless you want to use it you don't have to alter your
# configuration file.
# This should allow IDEs that don't automatically save on compilation to work with the new precompiler,
# however beware that this will reintroduce the old issues where you will get errors like
# "Failed to xxx at line 29496" and then have you manually figure out that this is in fact line 48 in
# include file #12.
# There may also be issues with using the #include directive with older IDEs that may not properly resolve
# this (I recall the official IDE had this problem a few years back, though it may have been fixed by now).
########################################
# Build 1.0.0.3 on 2016-10-09
########################################
# § Fixed a bug where any combination of multiple whitespace characters inside a string would be condensed
# into a single whitespace.
# § Reintroduced the MESHRADIUS shader constant that was removed in 2011. Fixes issues with shaders using it.
# § Fixed an issue where the ABS() function was missing from previous builds.
# § Fixed an issue where the render target would be cleared in the middle of a two-step reflection shading pass.
# § Visual styles are now enabled for compiled programs, letting your Windows GUI applications use more
# modern themes.
########################################
# Build 1.0.0.4 on 2016-10-23
########################################
# § Issues with various third party plugins that originated from the plugin assuming functionality present in DirectX 9.0c
# that has since been removed in DirecX 9Ex have been addressed by manually implementing emulations of these, seamlessly
# forwarded to the plugin through the D3D interface.
# § Added new keywords to utilize the resource management functionality mentioned above for texture created through the DBPro
# runtime that will later be used by plugins assuming such functionality; these are as follows:
# ENABLE VIRTUAL TEXTURE MANAGEMENT
# DISABLE VIRTUAL TEXTURE MANAGEMENT
# IS VIRTUAL TEXTURE MANAGEMENT ENABLED
# § Now supports plugins that will attempt to access DirectX directly from another thread.
# Use the precompiler directive #USE MULTITHREADED DIRECTX to enable this for your project.
# § Single PRINT commands and the like should now handle dual buffering properly when backdrop clearing is disabled.
# § Fixed a memory leak in the precompiler.
# § The "About" dialog will now display the installed DBPro9Ex version.
# § Changes to the compiler has necessitated a new version of the Precompiler library. This means that any precompilers
# written using the old library will have to be recompiled with the new one to function properly. No code changes will
# be necessary; the changes are all internal.