Sorry your browser is not supported!

You are using an outdated browser that does not support modern web technologies, in order to use this site please update to a new browser.

Browsers supported include Chrome, FireFox, Safari, Opera, Internet Explorer 10+ or Microsoft Edge.

PureGDK / [STICKY] PureGDK 2.0 Beta - Summary of Features

DarkGDK Developer
Years of Service
User Offline
Joined: 9th Nov 2005
Posted: 11th Aug 2011 02:44 Edited at: 12th Dec 2011 10:17
PureGDK 2.0 is coming alone well and is rapidly approaching release candidate status. A lot of work has been put into not only porting the DarkBasic Professional engine, but also improving it along the way.

There is a whole lot more to PureGDK in the detail. This is just a summary of the changes to give you a taste of the improvements you can expect from it:

PureGDK currently comes with support for C++ and PureBasic, with experimental support for Java. One of the key features of PureGDK is that it is very easy to port to other languages; all of the code and documentation is automatically generated by language plugins (source available in the PureGDK SDK). Ideally we'll see full support for Java, C, Delphi, Python, and Perl in the future as well.

The new engine is extremely lightweight and highly customizable. Now you can enjoy the power of DarkBasic Professional from your favorite language. And if you have multiple favorites-- no problem!

Feature highlights:

All of DBP compressed down into a single DLL
Engine customization; basic 3D in less than 800 KB!
Future support is anticipated for additional programming languages.
Language agnostic interface; all exports are C function calls
Internal multithreading support. Go thread crazy!
Enhanced commands including true support for structured parameters
Potential support for rendering in a web browser
Rewritten, extremely fast 3D math library
Improved documentation for all DarkBasic Professional commands
Superior runtime error support that is thread-aware
Easy to use command line tools for automated compiling
Plugin-based parser. Adding support for your own language is a breeze!

Over 250 new commands plus complete integration and documentation of:

Advanced Terrain
Cloth and Particle Physics
Light Mapping
Constructive Solid Geometry (CSG)
Static Collisions
Dynamic Cube Maps
Camera Shader Effects

Projects supported by PureGDK out of the box:

Visual Studio 2010
Visual Studio 2008
Visual Studio 2005
Visual Studio .NET 2003
Visual Studio .NET
Visual Studio 6
GNU make/GCC g++
PureBasic 4

This list is not finite! PureGDK will "just work" with any standards-compliant C++ compiler. This includes any version of Visual Studio Express, g++, Borland, Watcom, Intel, Comeau, etc.

PureGDK is 100% compatible with DarkBasic Professional plugins and supports a plethora of commercial and user plugins out-of-the-box, adding more than 3500 additional commands to an already elaborate command set:

2D Plugin Kit
A* Pathfinding
Advanced Audio 1.55
Advanced Sprites
Blitzwerks Terrain
Cloggy's D3DFunc library
Dark A.I.
Dark Clouds
Dark Data
Dark Imposters
Dark Ink
Dark Lights
Dark Net
Dark Physics
Dark Video
DarkSide Starburst particles
DBP Collisions (Sparky's collision)
Enhancement Pack
Enhanced Animation
EZ Rotate
EZ Rotate Basic
IanM's Matrix1Util libraries 09
IanM's Matrix1Util libraries 12
IanM's Matrix1Util libraries 18
IanM's Matrix1Util libraries 20
IanM's Matrix1Util libraries 26
ImageKit Version 2
Intel AppUp Helper Plugin
Netwon Game Dynamics (Physics)
Object LOD
Texture Max

Program using your favorite IDE. Any IDE. Any language!

PureGDK: Project Setup in Visual Studio 2008

Screenshot of PureGDK and the PureBasic IDE:

Screenshot of PureGDK and the Qt Creator C++ IDE:

Here is a video of a C++ example project being run and debugged from the Qt Creator IDE. It also demos the flexibility of PureGDK by compiling from a UNIX (cygwin) command line using Make and the GNU g++ compiler. It should work with most any C/C++ compiler.

PureGDK can even run in Java. Here is a link to a prototype on the WIP forum to demonstrate the available cross-language flexibility:

Brand new language-specific documentation! Everything is in the excellent .chm format with an index and full text search.

Here is a screenshot of the DarkGDK documentation for a comparison:

Here is an example project converted from one of EVOLVED's superior shadow shader examples:

Many of the commands have been renamed for clarity and others have had their parameters reordered to support default parameters and function polymorphism.

Here is an example of a function which will have its parameters reordered for automatic ID allocation:

Quote: "
dbLoadSound(string fileName [, int soundID])"

The "soundID" parameter is optional and therefore appears at the end of the function. If no ID is specified, one will be returned as the result.

For functions which take advantage of default parameters, the header might look like this:

Quote: "
dbLoadSound(string fileName, int soundID = -1)"

And for others which use function polymorphism, for example:

Quote: "
dbLoadSound(string fileName)
dbLoadSound(string fileName, int soundID)"

Another example where a command might be different is "dbSetDisplayMode".

In DarkGDK you can use these commands to change the resolution:

Quote: "
void dbSetDisplayMode (int iWidth, int iHeight, int iDepth)
bool dbSetDisplayModeEx(int iWidth, int iHeight)
bool dbSetDisplayModeEx(int iWidth, int iHeight, int iDepth)
bool dbSetDisplayModeEx(int iWidth, int iHeight, int iDepth, int iMode)
bool dbSetDisplayModeEx(int iWidth, int iHeight, int iDepth, int iMode, int iVertexProcessing)
bool dbSetDisplayModeEx(int iWidth, int iHeight, int iDepth, int iMode, int iVertexProcessing, int iLockable)
bool dbSetDisplayModeVSync(int iWidth, int iHeight, int iDepth, int iVSyncOn)
bool dbSetDisplayModeAntialias (int iWidth, int iHeight, int iDepth, int iVSyncOn, int iMultisamplingFactor, int iMultimonitorMode)"

In PureGDK the same command with optional parameters is:

Quote: "
dbSetDisplayMode(int width, int height[, int depth [, int vSync [, int multiSampling [, int multiMonitor [, int backBufferWidth [, int backBufferHeight [, int vrMode]]]]]]])"

In this function each parameter after width and height can be optionally specified.

PureGDK has built-in support for multithreading by providing function-level critical sections for your convenience behind the scenes as well as thread-aware error handling. Each function can have several possible error codes which can be detected are caught at runtime for you to examine and respond to.

For example, dbCreateMatrix() can throw any of the following errors for you to catch with dbGetLastError():

Quote: "

dbGetLastError() will return the last error to occur in the current thread. It can safely and accurately be used across multiple threads.

PureGDK uses structures to instead of IDs to pass vector and matrix data between functions. Please refer to your language documentation for instructions on how to pass a structure by address.

In C++, to pass a vector to a function it must be passed by address using the '&' operator. The following example will create two variables with Vector2 structures and then add them together.

+ Code Snippet

Another difference that some of you might not be aware of is that PureGDK does NOT use "DarkGDK()/LoopGDK()". You can use whatever entry point you want, be it main(), WinMain(), _tWinMain(), etc:

+ Code Snippet

Unlike DBP and DarkGDK, in PureGDK, the renderable area is separate from the actual window. As you can see from this example code, dbOpenScreen accepts a target window handle "hWnd" which tells it where to render the output. This allows PureGDK to render to "any" window owned by the process and is not limited to any one implementation, for example: you can use PureGDK with GLUT, Qt, Win32, wxWidgets, etc.

Some quotes from beta testers that really personify the PureGDK experience:

Quote: "I've been working on a small DarkGDK game for some time now. .. for the last month I've had a extremely bad bug that just stopped my whole game from working altogether, and I could not find out what was causing it. Once I merged the code to the latest PureGDK. The problem seemed to fix itself.

There is really no denying this is by far superior. And it has brilliant support."

(PureGDK provides bug fixes and enhancements under the hood where possible)

Quote: "I was EXTREMELY impressed with the documentation. It didn't miss anything and I had next to no problems as it covered everything I needed to know perfectly. I got a level of my game running on the second compile!"

Quote: "It's great that you return std::string from functions that used to return char* in Dark GDK."

Quote: "The [documentation] is GREAT"

Quote: ".. the automatic ID allocation is another GREAT feature which I will definitely use."

Quote: "So far I'm getting more than double the frame rate [compared to DarkGDK], this is awesome!"

Quote: "With my short time working with the latest build of PureGDK, I was able to port my DGDK game over, have massive performance increases, numerous bugs fixes, and start experiencing with a massive range of DBPro plugins.

PureGDK, in other words, is nothing short of the best product on TGC at the moment.

Props to Mistrel. His dedication and helpful support is delivering a product with ten times the capability of Dark GDK."

Quote: "I made the jump over today and after porting my project over I was surprised at the speed increase between [DarkGDK] and PureGDK.
I also like the freedom it gives you. Start a new 'Blank' project from Visual Studio. Getting used to being in the open environment now with full access to the WinApi."

Quote: "I like the speed increase, and I've just checked, it was in debug mode and not release either.

So far a big thumbs up..."

Login to post a reply

Server time is: 2017-07-22 03:52:17
Your offset time is: 2017-07-22 03:52:17