DarkGDK 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 DarkGDK in the detail. This is just a summary of the changes to give you a taste of the improvements you can expect from it:
http://forum.thegamecreators.com/?m=forum_view&t=177817&b=38
DarkGDK currently comes with support for C++ and PureBasic, with experimental support for Java. One of the key features of DarkGDK 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 DarkGDK 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 DarkGDK 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++
Nmake/VC++
PureBasic 4
This list is not finite! DarkGDK will "just work" with any standards-compliant C++ compiler. This includes any version of Visual Studio Express, g++, Borland, Watcom, Intel, Comeau, etc.
DarkGDK 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
Box2D
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
Extends
EZ Rotate
EZ Rotate Basic
Green-Ear
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
Multisync
Netwon Game Dynamics (Physics)
Object LOD
Quadtree
STYX
Texture Max
Unity
zParticles
Program using your favorite IDE. Any IDE. Any language!
DarkGDK: Project Setup in Visual Studio 2008
Screenshot of DarkGDK and the PureBasic IDE:
Screenshot of DarkGDK 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 DarkGDK by compiling from a UNIX (cygwin) command line using Make and the GNU g++ compiler. It should work with most any C/C++ compiler.
http://darkgdk.com/files/upload/TGCForum/pgdk_cpp_demo_xvid.avi
DarkGDK can even run in Java. Here is a link to a prototype on the WIP forum to demonstrate the available cross-language flexibility:
http://forum.thegamecreators.com/?m=forum_view&t=187752&b=8
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 old DarkGDK documentation for a comparison:
Here is an example project converted from one of EVOLVED's superior shadow shader examples:
http://forum.thegamecreators.com/?m=forum_view&t=187923&b=38
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 1.0 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 DarkGDK 2.0 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.
DarkGDK 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: "
kGDK_Error_3D_Matrix_ID_Invalid
kGDK_Error_3D_Matrix_Exists
kGDK_Error_3D_Matrix_Segment_Invalid
kGDK_Error_3D_Matrix_Dimension_Invalid
kGDK_Error_3D_Matrix_Too_Large"
dbGetLastError() will return the last error to occur in the current thread. It can safely and accurately be used across multiple threads.
DarkGDK 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.
#include <include/darkgdk/core/darkgdk.h>
#include <include/darkgdk/initDarkGDK.h>
#include <include/darkgdk/simpleWindow.h>
#include <iostream>
using namespace std;
int main(int, char*) {
HWND hWnd;
if (!initDarkGDK("gdkengine.dll"))
return 1;
hWnd = openWindow(0, 0, 640, 480, "DarkGDK - Game Developer's Toolkit",
WS_OVERLAPPED | WS_CLIPSIBLINGS | WS_CAPTION | WS_SYSMENU |
WS_CLIPCHILDREN, true);
dbOpenScreen(hWnd, 0, 0, 640, 480);
// Declare variables with pre-defined structures
Vector2 Vector2a;
Vector2 Vector2b;
Vector2 Vector2Result;
// Set vector data
Vector2a.x = 3;
Vector2a.y = 5;
Vector2b.x = 7;
Vector2b.y = 5;
// Add vectors together
dbAddVector2(&Vector2Result, &Vector2a, &Vector2b);
// Output results
cout << Vector2Result.x << endl; // 3 + 7 = 10
cout << Vector2Result.y << endl; // 5 + 5 = 10
system("pause");
return 0;
}
Another difference that some of you might not be aware of is that DarkGDK does NOT use "DarkGDK()/LoopGDK()". You can use whatever entry point you want, be it main(), WinMain(), _tWinMain(), etc:
#include <darkgdk.h>
#include <initDarkGDK.h>
#include <simpleWindow.h>
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
HWND hWnd;
If (!initDarkGDK("gdkengine.dll"))
Return 1;
hWnd = OpenWindow(0, 0, 640, 480, "DarkGDK - Game Developer's Toolkit",
WS_OVERLAPPED | WS_CLIPSIBLINGS | WS_CAPTION | WS_SYSMENU |
WS_CLIPCHILDREN, true);
dbOpenScreen(hWnd, 0, 0, 640, 480);
ShowWindow(hWnd, SW_SHOW);
// Set the current directory
SetCurrentDirectory("media1");
..
return 0;
}
Unlike DBP and DarkGDK 1.0, in DarkGDK 2.0, 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 DarkGDK to render to "any" window owned by the process and is not limited to any one implementation, for example: you can use DarkGDK with GLUT, Qt, Win32, wxWidgets, etc.
Some quotes from beta testers that really personify the DarkGDK experience:
Rampage:
Quote: "I've been working on a small DarkGDK [1.0] 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 DarkGDK. The problem seemed to fix itself.
There is really no denying this is by far superior. And it has brilliant support."
http://forum.thegamecreators.com/?m=forum_view&t=177817&b=38&msg=2239590#m2239590
Rampage:
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!"
http://forum.thegamecreators.com/?m=forum_view&t=177817&b=38&msg=2239623#m2239623
Mireben:
Quote: "It's great that you return std::string from functions that used to return char* in Dark GDK."
http://forum.thegamecreators.com/?m=forum_view&t=177817&b=38&msg=2240734#m2240734
Mireben:
Quote: "The [documentation] is GREAT"
http://forum.thegamecreators.com/?m=forum_view&t=177817&b=38&msg=2240734#m2240734
Mireben:
Quote: ".. the automatic ID allocation is another GREAT feature which I will definitely use."
http://forum.thegamecreators.com/?m=forum_view&t=177817&b=38&msg=2240737#m2240737
Dodga:
Quote: "So far I'm getting more than double the frame rate [compared to DarkGDK 1.0], this is awesome!"
http://forum.thegamecreators.com/?m=forum_view&t=187749&b=22&msg=2239575#m2239575
Rampage:
Quote: "With my short time working with the latest build of [DarkGDK 2.0], 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.
[DarkGDK 2.0], 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."
http://forum.thegamecreators.com/?m=forum_view&t=187749&b=22&msg=2239655#m2239655
WLGfx:
Quote: "I made the jump over today and after porting my project over I was surprised at the speed increase between [DarkGDK 1.0] and [DarkGDK 2.0].
..
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."
http://forum.thegamecreators.com/?m=forum_view&t=187749&b=22&msg=2240015#m2240015
WLGfx:
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..."
http://forum.thegamecreators.com/?m=forum_view&t=187807&b=38&msg=2239903#m2239903