Hi All,
I am attempting to wrap a dll, specifically, a new xors3d wrapper.
I am aware one exists, but I want to learn, and I understand the existing wrapper is no longer maintained anyway.
If I can successfully wrap xors3d, of course it will be my contribution to the community, and will be a nice compliment to bigsofty's ixors3d wrapper.
Anyway, I have one of the working samples from the purebasic version translated to glbasic, and necessary functions are wrapped to support the sample.
It compiles with no errors, but does not work as expected.
The wrapper file is added to the project, the dll files provided with the xors3d demo are place in the app folder inside the project, and the texture is placed in app's media folder, in a subfolder called textures
If someone sees what I am doing wrong, please provide me some feedback, so I can continue moving forward.
This is my first adventure with inline code, and I am working from Gernot's dll wrapping tutorial, as well as looking at how the purebasic wrapper is built for comparison.
Here is the sample code
// --------------------------------- //
// Project: xors3d headers
// Start: Monday, September 13, 2010
// IDE Version: 8.085
// Sample xors3d usage
//GLOBAL KEY_ESCAPE% = 01
//GLOBAL KEY_W% = 17
//GLOBAL KEY_S% = 31
//GLOBAL KEY_A% = 30
//GLOBAL KEY_D% = 32
GLOBAL KEY_ESCAPE% = 27
GLOBAL KEY_W% = 87
GLOBAL KEY_S% = 83
GLOBAL KEY_A% = 65
GLOBAL KEY_D% = 68
// setup maximum supported AntiAlias TYPE
xSetAntiAliasType(xGetMaxAntiAlias())
// set application window caption
xAppTitle("Simple sample")
// initialize graphics mode
xGraphics3D(800, 600, 32, FALSE, TRUE)
// hide mouse pointer
xHidePointer()
// enable antialiasing
xAntiAlias(TRUE)
// create camera
LOCAL camera% = xCreateCamera(0)
// position camera
xPositionEntity(camera, 0, 0, -10)
// create cube
LOCAL cube% = xCreateCube(0)
// loading logo from file
LOCAL logoTexture% = xLoadTexture("Media\Textures\logo.jpg")
// texture cube
xEntityTexture(cube, logoTexture)
// for mouse look
xMoveMouse(xGraphicsWidth()*0.5, xGraphicsHeight()*0.5)
LOCAL mousespeed# = 0.5
LOCAL camerasmoothness# = 4.5
// main program loop
WHILE NOT xKeyDown(KEY_ESCAPE)
IF xKeyDown(KEY_W)
xMoveEntity(camera, 0, 0, 1)
ENDIF
IF xKeyDown(KEY_S)
xMoveEntity(camera, 0, 0, -1)
ENDIF
IF xKeyDown(KEY_A)
xMoveEntity(camera, -1, 0, 0)
ENDIF
IF xKeyDown(KEY_D)
xMoveEntity(camera, 1, 0, 0)
ENDIF
LOCAL mxs# = 0.0
LOCAL mys# = 0.0
mxs = CurveValue(xMouseXSpeed() * mousespeed, mxs, camerasmoothness)
mys = CurveValue(xMouseYSpeed() * mousespeed, mys, camerasmoothness)
LOCAL Fix% = MOD(FtoI(mxs),360) + (mxs - FtoI(mxs))
LOCAL camxa# = 0.0
LOCAL camya# = 0.0
camxa = camxa - Fix
camya = camya + mys
IF camya < -89
camya = -89
ENDIF
IF camya > 89
camya = 89
ENDIF
xMoveMouse(xGraphicsWidth()*0.5, xGraphicsHeight()*0.5)
xRotateEntity(camera, camya, camxa, 0.0)
// turn cube
xTurnEntity(cube, 0, 1, 0)
// render scene
xRenderWorld()
// switch back buffer
xFlip()
WEND
// for camera mouse look
FUNCTION CurveValue#: newValue#, oldValue#, increments%
IF increments% > 1
oldValue# = oldValue# - (oldValue# - newValue#) / increments%
ENDIF
IF increments% <= 1
oldValue# = newValue#
ENDIF
RETURN oldValue#
ENDFUNCTION
// float to integer
FUNCTION FtoI%: input#
LOCAL output% = input#
RETURN output%
ENDFUNCTION
And here is the wrapper code
// --------------------------------- //
// Project: xors3d headers
// Start: Monday, September 13, 2010
// IDE Version: 8.085
// AntiAliasing Types
GLOBAL AANONE% = 0
GLOBAL AA2SAMPLES% = 1
GLOBAL AA3SAMPLES% = 2
GLOBAL AA4SAMPLES% = 3
GLOBAL AA5SAMPLES% = 4
GLOBAL AA6SAMPLES% = 5
GLOBAL AA7SAMPLES% = 6
GLOBAL AA8SAMPLES% = 7
GLOBAL AA9SAMPLES% = 8
GLOBAL AA10SAMPLES% = 9
GLOBAL AA11SAMPLES% = 10
GLOBAL AA12SAMPLES% = 11
GLOBAL AA13SAMPLES% = 12
GLOBAL AA14SAMPLES% = 13
GLOBAL AA15SAMPLES% = 14
GLOBAL AA16SAMPLES% = 15
// Texture Loading Flags
GLOBAL FLAGS_COLOR% = 1
GLOBAL FLAGS_ALPHA% = 2
GLOBAL FLAGS_MASKED% = 4
GLOBAL FLAGS_MIPMAPPED% = 8
GLOBAL FLAGS_CLAMPU% = 16
GLOBAL FLAGS_CLAMPV% = 32
GLOBAL FLAGS_SPHERICALENVMAP% = 64
GLOBAL FLAGS_CUBICENVMAP% = 128
GLOBAL FLAGS_R32F% = 256
GLOBAL FLAGS_RESERVED% = 512
GLOBAL FLAGS_VOLUMETEXTURE% = 1024
GLOBAL FLAGS_ARGB16F% = 2048
GLOBAL FLAGS_ARGB32F% = 4096
INLINE
extern "C"
{
// Camera Functions
DECLARE_ALIAS(glb_xCreateCamera, "xors3d.dll", "xCreateCamera", (int, int), int);
// Entity Control Functions
DECLARE_ALIAS(glb_xEntityTexture, "xors3d.dll", "xEntityTexture", (int, int, int, int), void);
// Entity Movement Functions
DECLARE_ALIAS(glb_xPositionEntity, "xors3d.dll", "xPositionEntity", (int, float, float, float, int), void);
DECLARE_ALIAS(glb_xMoveEntity, "xors3d.dll", "xMoveEntity", (int, float, float, float, int), void);
DECLARE_ALIAS(glb_xRotateEntity, "xors3d.dll", "xRotateEntity", (int, float, float, float, int), void);
DECLARE_ALIAS(glb_xTurnEntity, "xors3d.dll", "xTurnEntity", (int, float, float, float, int), void);
// Graphics Functions
DECLARE_ALIAS(glb_xRect, "xors3d.dll", "xRect", (int, int, int, int, int), void);
DECLARE_ALIAS(glb_xGetMaxAntiAlias, "xors3d.dll", "xGetMaxAntiAlias", (), int);
DECLARE_ALIAS(glb_xSetAntiAliasType, "xors3d.dll", "xSetAntiAliasType", (int), void);
DECLARE_ALIAS(glb_xAppTitle, "xors3d.dll", "xAppTitle", (const char*), void);
DECLARE_ALIAS(glb_xSetWND, "xors3d.dll", "xSetWND", (int), void);
DECLARE_ALIAS(glb_xSetRenderWindow, "xors3d.dll", "xSetRenderWindow", (int), void);
DECLARE_ALIAS(glb_xFlip, "xors3d.dll", "xFlip", (), void);
DECLARE_ALIAS(glb_xGraphicsWidth, "xors3d.dll", "xGraphicsWidth", (), int);
DECLARE_ALIAS(glb_xGraphicsHeight, "xors3d.dll", "xGraphicsHeight", (), int);
DECLARE_ALIAS(glb_xRenderWorld, "xors3d.dll", "xRenderWorld", (float, int), void);
DECLARE_ALIAS(glb_xAntiAlias, "xors3d.dll", "xAntiAlias", (int), void);
DECLARE_ALIAS(glb_xHidePointer, "xors3d.dll", "xHidePointer", (), void);
DECLARE_ALIAS(glb_xGraphics3D, "xors3d.dll", "xGraphics3D", (int, int, int, int, int), void);
// Input - Keyboard Functions
DECLARE_ALIAS(glb_xKeyDown, "xors3d.dll", "xKeyDown", (int), int);
// Input - Mouse Functions
DECLARE_ALIAS(glb_xMouseXSpeed, "xors3d.dll", "xMouseXSpeed", (), int);
DECLARE_ALIAS(glb_xMouseYSpeed, "xors3d.dll", "xMouseYSpeed", (), int);
DECLARE_ALIAS(glb_xMoveMouse, "xors3d.dll", "xMoveMouse", (int, int), void);
// Mesh Functions
DECLARE_ALIAS(glb_xCreateCube, "xors3d.dll", "xCreateCube", (int, int), int);
// Texture Functions
DECLARE_ALIAS(glb_xLoadTexture, "xors3d.dll", "xLoadTexture", (const char*, int), int);
}
ENDINLINE
// Camera Functions
FUNCTION xCreateCamera: entity%, parent%=0
INLINE
if(glb_xCreateCamera)
return glb_xCreateCamera(entity, parent);
ENDINLINE
ENDFUNCTION
// Entity Control Functions
FUNCTION xEntityTexture: entity%, texture%, frame%=0, index%=0
INLINE
if(glb_xEntityTexture)
glb_xEntityTexture(entity, texture, frame, index);
ENDINLINE
ENDFUNCTION
// Entity Movement Functions
FUNCTION xPositionEntity: entity%, x#, y#, z#, isGlobal%=FALSE
INLINE
if(glb_xPositionEntity)
glb_xPositionEntity(entity, x, y, z, isGlobal);
ENDINLINE
ENDFUNCTION
FUNCTION xMoveEntity: entity%, x#, y#, z#, isGlobal%=FALSE
INLINE
if(glb_xMoveEntity)
glb_xMoveEntity(entity, x, y, z, isGlobal);
ENDINLINE
ENDFUNCTION
FUNCTION xRotateEntity: entity%, x#, y#, z#, isGlobal%=FALSE
INLINE
if(glb_xRotateEntity)
glb_xRotateEntity(entity, x, y, z, isGlobal);
ENDINLINE
ENDFUNCTION
FUNCTION xTurnEntity: entity%, x#, y#, z#, isGlobal%=FALSE
INLINE
if(glb_xTurnEntity)
glb_xTurnEntity(entity, x, y, z, isGlobal);
ENDINLINE
ENDFUNCTION
// Graphics Functions
FUNCTION xRect: x%, y%, width%, height%, solid%=FALSE
INLINE
if(glb_xRect)
glb_xRect(x, y, width, height, solid);
ENDINLINE
ENDFUNCTION
FUNCTION xGetMaxAntiAlias:
INLINE
if(glb_xGetMaxAntiAlias)
return glb_xGetMaxAntiAlias();
ENDINLINE
ENDFUNCTION
FUNCTION xSetAntiAliasType: typeID%
INLINE
if(glb_xSetAntiAliasType)
glb_xSetAntiAliasType(typeID);
ENDINLINE
ENDFUNCTION
FUNCTION xAppTitle: title$
INLINE
if(glb_xAppTitle)
glb_xAppTitle(title_Str.c_str());
ENDINLINE
ENDFUNCTION
FUNCTION xSetWND: window%
INLINE
if(glb_xSetWND)
glb_xSetWND(window);
ENDINLINE
ENDFUNCTION
FUNCTION xSetRenderWindow: window%
INLINE
if(glb_xSetRenderWindow)
glb_xSetRenderWindow(window);
ENDINLINE
ENDFUNCTION
FUNCTION xFlip:
INLINE
if(glb_xFlip)
glb_xFlip();
ENDINLINE
ENDFUNCTION
FUNCTION xGraphicsWidth:
INLINE
if(glb_xGraphicsWidth)
return glb_xGraphicsWidth();
ENDINLINE
ENDFUNCTION
FUNCTION xGraphicsHeight:
INLINE
if(glb_xGraphicsHeight)
return glb_xGraphicsHeight();
ENDINLINE
ENDFUNCTION
FUNCTION xRenderWorld: twin#=1.0, renderShadows%=FALSE
INLINE
if(glb_xRenderWorld)
glb_xRenderWorld(twin, renderShadows);
ENDINLINE
ENDFUNCTION
FUNCTION xAntiAlias: state%
INLINE
if(glb_xAntiAlias)
glb_xAntiAlias(state);
ENDINLINE
ENDFUNCTION
FUNCTION xHidePointer:
INLINE
if(glb_xHidePointer)
glb_xHidePointer();
ENDINLINE
ENDFUNCTION
FUNCTION xGraphics3D: width%=640, height%=480, depth%=16, mode%=FALSE, vsync%=FALSE
INLINE
if(glb_xGraphics3D)
glb_xGraphics3D(width, height, depth, mode, vsync);
ENDINLINE
ENDFUNCTION
// Input - Keyboard Functions
FUNCTION xKeyDown: key%
INLINE
if(glb_xKeyDown)
return glb_xKeyDown(key);
ENDINLINE
ENDFUNCTION
// Input - Mouse Functions
FUNCTION xMouseXSpeed:
INLINE
if(glb_xMouseXSpeed)
return glb_xMouseXSpeed();
ENDINLINE
ENDFUNCTION
FUNCTION xMouseYSpeed:
INLINE
if(glb_xMouseYSpeed)
return glb_xMouseYSpeed();
ENDINLINE
ENDFUNCTION
FUNCTION xMoveMouse: x%, y%
INLINE
if(glb_xMoveMouse)
glb_xMoveMouse(x, y);
ENDINLINE
ENDFUNCTION
// Mesh Functions
FUNCTION xCreateCube: entity%, parent%=0
INLINE
if(glb_xCreateCube)
return glb_xCreateCube(entity, parent);
ENDINLINE
ENDFUNCTION
// Texture Functions
FUNCTION xLoadTexture: path$, flag%=9
INLINE
if(glb_xLoadTexture)
return glb_xLoadTexture(path_Str.c_str(), flag);
ENDINLINE
ENDFUNCTION
Thanks in advance,
Dave