]> git.jsancho.org Git - guile-irrlicht.git/blobdiff - src/video-driver.cpp
Some doc
[guile-irrlicht.git] / src / video-driver.cpp
index b52b24f6e2b9593a916d1c94f35f6fc0a0ce6af3..60fc867cdb3050e46a0111230e8bd13854cb19cc 100644 (file)
@@ -114,13 +114,22 @@ IVideoDriver_getFPS (SCM video_driver)
   return scm_from_int32 (driver->getFPS ());
 }
 
+SCM
+IVideoDriver_getName (SCM video_driver)
+{
+  video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_irr_pointer (video_driver);
+  return scm_from_utf32_string ((scm_t_wchar*) driver->getName ());
+}
+
 SCM
 IVideoDriver_getTexture (SCM video_driver,
                          SCM filename)
 {
+  char* cfilename = scm_to_utf8_string (filename);
   video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_irr_pointer (video_driver);
-  video::ITexture* texture = driver->getTexture (scm_to_utf8_stringn (filename, NULL));
-  return scm_from_pointer ((void*) texture, NULL);
+  video::ITexture* texture = driver->getTexture (cfilename);
+  free (cfilename);
+  return scm_from_irr_pointer ("<texture>", (void*) texture);
 }
 
 SCM
@@ -152,6 +161,7 @@ init_video_driver (void)
                 IVideoDriver_drawVertexPrimitiveList);
   DEFINE_GSUBR ("IVideoDriver_endScene", 1, 0, 0, IVideoDriver_endScene);
   DEFINE_GSUBR ("IVideoDriver_getFPS", 1, 0, 0, IVideoDriver_getFPS);
+  DEFINE_GSUBR ("IVideoDriver_getName", 1, 0, 0, IVideoDriver_getName);
   DEFINE_GSUBR ("IVideoDriver_getTexture", 2, 0, 0, IVideoDriver_getTexture);
   DEFINE_GSUBR ("IVideoDriver_setMaterial", 2, 0, 0, IVideoDriver_setMaterial);
   DEFINE_GSUBR ("IVideoDriver_setTransform", 3, 0, 0, IVideoDriver_setTransform);
@@ -160,38 +170,43 @@ init_video_driver (void)
 video::E_TRANSFORMATION_STATE
 scm_to_transformation_state (SCM transformation_state)
 {
-  char* state = scm_to_utf8_stringn (scm_symbol_to_string (transformation_state), NULL);
-  if (!strcmp (state, "view"))
+  char* state_name = scm_to_utf8_string (scm_symbol_to_string (transformation_state));
+  video::E_TRANSFORMATION_STATE state;
+
+  if (!strcmp (state_name, "view"))
     {
-      return video::ETS_VIEW;
+      state = video::ETS_VIEW;
     }
-  else if (!strcmp (state, "world"))
+  else if (!strcmp (state_name, "world"))
     {
-      return video::ETS_WORLD;
+      state = video::ETS_WORLD;
     }
-  else if (!strcmp (state, "projection"))
+  else if (!strcmp (state_name, "projection"))
     {
-      return video::ETS_PROJECTION;
+      state = video::ETS_PROJECTION;
     }
-  else if (!strcmp (state, "texture0"))
+  else if (!strcmp (state_name, "texture0"))
     {
-      return video::ETS_TEXTURE_0;
+      state = video::ETS_TEXTURE_0;
     }
-  else if (!strcmp (state, "texture1"))
+  else if (!strcmp (state_name, "texture1"))
     {
-      return video::ETS_TEXTURE_1;
+      state = video::ETS_TEXTURE_1;
     }
-  else if (!strcmp (state, "texture2"))
+  else if (!strcmp (state_name, "texture2"))
     {
-      return video::ETS_TEXTURE_2;
+      state = video::ETS_TEXTURE_2;
     }
-  else if (!strcmp (state, "texture3"))
+  else if (!strcmp (state_name, "texture3"))
     {
-      return video::ETS_TEXTURE_3;
+      state = video::ETS_TEXTURE_3;
     }
   else
     {
       scm_error (scm_arg_type_key, NULL, "Wrong transformation state: ~S",
                  scm_list_1 (transformation_state), scm_list_1 (transformation_state));
     }
+
+  free (state_name);
+  return state;
 }