X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2FIrrlichtDevice.cpp;h=026df21fa8c889118db96aee51462d323c07fb43;hb=03d4e13abc392abec3ef9cb6a97d83a5ae722ca8;hp=b3b33bdfc0096d68fecca1b7cfc5ce74138eed51;hpb=d27297a52c2399bd71661513d93da43a2a3e9ad1;p=guile-irrlicht.git diff --git a/src/IrrlichtDevice.cpp b/src/IrrlichtDevice.cpp index b3b33bd..026df21 100644 --- a/src/IrrlichtDevice.cpp +++ b/src/IrrlichtDevice.cpp @@ -22,35 +22,30 @@ #include #include #include + +#include "dimension2d.h" #include "EDriverTypes.h" +#include "IGUIEnvironment.h" #include "IrrlichtDevice.h" -#include "dimension2d.h" +#include "ISceneManager.h" +#include "IVideoDriver.h" +#include "util.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-gui-environment", 1, 0, 0, (scm_t_subr)irr_getGUIEnvironment); + scm_c_define_gsubr ("get-scene-manager", 1, 0, 0, (scm_t_subr)irr_getSceneManager); + 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; - - void - init_irrlicht_device_object (void) - { - SCM name, slots; - scm_t_struct_finalize finalizer; - - name = scm_from_utf8_symbol ("device"); - slots = scm_list_1 (scm_from_utf8_symbol ("data")); - finalizer = NULL; - - irrlicht_device = - scm_make_foreign_object_type (name, slots, finalizer); - } + DEFINE_WRAPPED_TYPE (irr::IrrlichtDevice*, "device", + init_device_type, wrap_device, unwrap_device); SCM irr_createDevice (SCM deviceType, @@ -68,20 +63,41 @@ 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_getGUIEnvironment (SCM device_obj) + { + irr::IrrlichtDevice* device = unwrap_device (device_obj); + irr::gui::IGUIEnvironment* gui_environment = device->getGUIEnvironment(); + return wrap_gui_environment (gui_environment); + } + + SCM + irr_getSceneManager (SCM device_obj) + { + irr::IrrlichtDevice* device = unwrap_device (device_obj); + irr::scene::ISceneManager* scene_manager = device->getSceneManager(); + return wrap_scene_manager (scene_manager); + } + + 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);