X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2FIrrlichtDevice.cpp;h=66c8c545ef828aff05f21c0f7ab67ce4c05c76f9;hb=a59c8c830960e4937ea29584ce7500a6603ab428;hp=b3b33bdfc0096d68fecca1b7cfc5ce74138eed51;hpb=d27297a52c2399bd71661513d93da43a2a3e9ad1;p=guile-irrlicht.git diff --git a/src/IrrlichtDevice.cpp b/src/IrrlichtDevice.cpp index b3b33bd..66c8c54 100644 --- a/src/IrrlichtDevice.cpp +++ b/src/IrrlichtDevice.cpp @@ -22,24 +22,27 @@ #include #include #include + +#include "dimension2d.h" #include "EDriverTypes.h" #include "IrrlichtDevice.h" -#include "dimension2d.h" +#include "IVideoDriver.h" extern "C" { void - init_irrlicht_device (void) + init_device (void) { - init_irrlicht_device_object (); + init_device_type (); scm_c_define_gsubr ("create-device", 7, 0, 0, (scm_t_subr)irr_createDevice); + scm_c_define_gsubr ("get-video-driver", 1, 0, 0, (scm_t_subr)irr_getVideoDriver); scm_c_define_gsubr ("set-window-caption!", 2, 0, 0, (scm_t_subr)irr_setWindowCaption); } - static SCM irrlicht_device; + static SCM device_type; void - init_irrlicht_device_object (void) + init_device_type (void) { SCM name, slots; scm_t_struct_finalize finalizer; @@ -48,10 +51,23 @@ extern "C" { slots = scm_list_1 (scm_from_utf8_symbol ("data")); finalizer = NULL; - irrlicht_device = + device_type = scm_make_foreign_object_type (name, slots, finalizer); } + SCM + wrap_device (irr::IrrlichtDevice* device) + { + return scm_make_foreign_object_1 (device_type, device); + } + + irr::IrrlichtDevice* + unwrap_device (SCM device_obj) + { + scm_assert_foreign_object_type (device_type, device_obj); + return (irr::IrrlichtDevice*)scm_foreign_object_ref (device_obj, 0); + } + SCM irr_createDevice (SCM deviceType, SCM windowSize, @@ -68,20 +84,25 @@ extern "C" { scm_to_bool (fullscreen), scm_to_bool (stencilbuffer), scm_to_bool (vsync)); - return scm_make_foreign_object_1 (irrlicht_device, device); + return wrap_device (device); + } + + SCM + irr_getVideoDriver (SCM device_obj) + { + irr::IrrlichtDevice* device = unwrap_device (device_obj); + irr::video::IVideoDriver* driver = device->getVideoDriver(); + return wrap_video_driver (driver); } SCM irr_setWindowCaption (SCM device_obj, SCM text) { - irr::IrrlichtDevice* device; + irr::IrrlichtDevice* device = unwrap_device (device_obj); char* ctext; wchar_t* wtext; - scm_assert_foreign_object_type (irrlicht_device, device_obj); - device = (irr::IrrlichtDevice*)scm_foreign_object_ref (device_obj, 0); - ctext = scm_to_utf8_stringn (text, NULL); wtext = (wchar_t*)malloc ((strlen (ctext) + 1) * sizeof (wchar_t)); mbstowcs (wtext, ctext, strlen (ctext) + 1);