diff options
author | Araq <rumpf_a@web.de> | 2011-08-07 21:02:09 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2011-08-07 21:02:09 +0200 |
commit | 5131b3cea4ba50970ef5d3313cbd8a75acadc2d7 (patch) | |
tree | 28391aa51f7011e381da3c23cd3aee483a78e4a6 /examples/c++iface/irrlichtex.nim | |
parent | 7748dbc0b24756459e25e2f9f55a219f7d3faf50 (diff) | |
download | Nim-5131b3cea4ba50970ef5d3313cbd8a75acadc2d7.tar.gz |
support for C++ code generation; importcpp and importobjc pragmas
Diffstat (limited to 'examples/c++iface/irrlichtex.nim')
-rw-r--r-- | examples/c++iface/irrlichtex.nim | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/examples/c++iface/irrlichtex.nim b/examples/c++iface/irrlichtex.nim new file mode 100644 index 000000000..4dd1d79ee --- /dev/null +++ b/examples/c++iface/irrlichtex.nim @@ -0,0 +1,114 @@ +# Horrible example of how to interface with a C++ engine ... ;-) + +{.link: "/usr/lib/libIrrlicht.so".} + +{.emit: """ +using namespace irr; +using namespace core; +using namespace scene; +using namespace video; +using namespace io; +using namespace gui; +""".} + +const + irr = "<irrlicht/irrlicht.h>" + +type + TDimension2d {.final, header: irr, importc: "dimension2d".} = object + Tvector3df {.final, header: irr, importc: "vector3df".} = object + TColor {.final, header: irr, importc: "SColor".} = object + + TIrrlichtDevice {.final, header: irr, importc: "IrrlichtDevice".} = object + TIVideoDriver {.final, header: irr, importc: "IVideoDriver".} = object + TISceneManager {.final, header: irr, importc: "ISceneManager".} = object + TIGUIEnvironment {.final, header: irr, importc: "IGUIEnvironment".} = object + TIAnimatedMesh {.final, header: irr, importc: "IAnimatedMesh".} = object + TIAnimatedMeshSceneNode {.final, header: irr, + importc: "IAnimatedMeshSceneNode".} = object + TITexture {.final, header: irr, importc: "ITexture".} = object + + PIrrlichtDevice = ptr TIrrlichtDevice + PIVideoDriver = ptr TIVideoDriver + PISceneManager = ptr TISceneManager + PIGUIEnvironment = ptr TIGUIEnvironment + PIAnimatedMesh = ptr TIAnimatedMesh + PIAnimatedMeshSceneNode = ptr TIAnimatedMeshSceneNode + PITexture = ptr TITexture + +proc dimension2d(x, y: cint): TDimension2d {. + header: irr, importc: "dimension2d<u32>".} +proc vector3df(x,y,z: cint): Tvector3df {. + header: irr, importc: "vector3df".} +proc SColor(r,g,b,a: cint): TColor {. + header: irr, importc: "SColor".} + +proc createDevice(): PIrrlichtDevice {. + header: irr, importc: "createDevice".} +proc run(device: PIrrlichtDevice): bool {. + header: irr, importcpp: "run".} + +proc getVideoDriver(dev: PIrrlichtDevice): PIVideoDriver {. + header: irr, importcpp: "getVideoDriver".} +proc getSceneManager(dev: PIrrlichtDevice): PISceneManager {. + header: irr, importcpp: "getSceneManager".} +proc getGUIEnvironment(dev: PIrrlichtDevice): PIGUIEnvironment {. + header: irr, importcpp: "getGUIEnvironment".} + +proc getMesh(smgr: PISceneManager, path: cstring): PIAnimatedMesh {. + header: irr, importcpp: "getMesh".} + +proc drawAll(smgr: PISceneManager) {. + header: irr, importcpp: "drawAll".} +proc drawAll(guienv: PIGUIEnvironment) {. + header: irr, importcpp: "drawAll".} + +proc drop(dev: PIrrlichtDevice) {. + header: irr, importcpp: "drop".} + +proc getTexture(driver: PIVideoDriver, path: cstring): PITexture {. + header: irr, importcpp: "getTexture".} +proc endScene(driver: PIVideoDriver) {. + header: irr, importcpp: "endScene".} +proc beginScene(driver: PIVideoDriver, a, b: bool, c: TColor) {. + header: irr, importcpp: "beginScene".} + +proc addAnimatedMeshSceneNode( + smgr: PISceneManager, mesh: PIAnimatedMesh): PIAnimatedMeshSceneNode {. + header: irr, importcpp: "addAnimatedMeshSceneNode".} + +proc setMaterialTexture(n: PIAnimatedMeshSceneNode, x: cint, t: PITexture) {. + header: irr, importcpp: "setMaterialTexture".} +proc addCameraSceneNode(smgr: PISceneManager, x: cint, a, b: TVector3df) {. + header: irr, importcpp: "addCameraSceneNode".} + + +var device = createDevice() +if device == nil: quit "device is nil" + +var driver = device.getVideoDriver() +var smgr = device.getSceneManager() +var guienv = device.getGUIEnvironment() + +var mesh = smgr.getMesh("/home/andreas/download/irrlicht-1.7.2/media/sydney.md2") +if mesh == nil: + device.drop() + quit "no mesh!" + +var node = smgr.addAnimatedMeshSceneNode(mesh) + +if node != nil: + #node->setMaterialFlag(EMF_LIGHTING, false) + #node->setMD2Animation(scene::EMAT_STAND) + node.setMaterialTexture(0, + driver.getTexture( + "/home/andreas/download/irrlicht-1.7.2/media/media/sydney.bmp")) + +smgr.addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0)) +while device.run(): + driver.beginScene(true, true, SColor(255,100,101,140)) + smgr.drawAll() + guienv.drawAll() + driver.endScene() +device.drop() + |