#include "matrix4.h"
#include "primitive-types.h"
#include "rect.h"
+#include "vertex3d.h"
#include "video-driver.h"
-
+#include "wrapped.h"
using namespace irr;
-
SCM
-video_IVideoDriver_beginScene (SCM video_driver,
- SCM back_buffer,
- SCM z_buffer,
- SCM color,
- SCM video_data,
- SCM source_rect)
+IVideoDriver_beginScene (SCM video_driver,
+ SCM back_buffer,
+ SCM z_buffer,
+ SCM color,
+ SCM video_data,
+ SCM source_rect)
{
- video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_pointer (video_driver);
+ video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_irr_pointer (video_driver);
// Source rect
core::rect<s32>* sourceRectAddress = 0;
sourceRectAddress));
}
-
SCM
-video_IVideoDriver_drawVertexPrimitiveList (SCM video_driver,
- SCM vertices,
- SCM indices,
- SCM v_type,
- SCM p_type)
+IVideoDriver_drawVertexPrimitiveList (SCM video_driver,
+ SCM vertices,
+ SCM indices,
+ SCM v_type,
+ SCM p_type)
{
// Build vertex array
u32 vertex_count = scm_to_uint32 (scm_length (vertices));
for (int i = 0; i < vertex_count; i++)
{
video::S3DVertex* vertex =
- (video::S3DVertex*) scm_to_pointer (scm_list_ref (vertices, scm_from_int (i)));
+ (video::S3DVertex*) scm_to_irr_pointer (scm_list_ref (vertices, scm_from_int (i)));
s3d_vertices[i] = video::S3DVertex (vertex->Pos,
vertex->Normal,
vertex->Color,
}
// Draw vertices
- video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_pointer (video_driver);
+ video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_irr_pointer (video_driver);
driver->drawVertexPrimitiveList (&s3d_vertices[0],
vertex_count,
&c_indices[0],
return SCM_UNSPECIFIED;
}
-
SCM
-video_IVideoDriver_endScene (SCM video_driver)
+IVideoDriver_endScene (SCM video_driver)
{
- video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_pointer (video_driver);
+ video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_irr_pointer (video_driver);
return scm_from_bool (driver->endScene ());
}
-
SCM
-video_IVideoDriver_getFPS (SCM video_driver)
+IVideoDriver_getFPS (SCM video_driver)
{
- video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_pointer (video_driver);
+ video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_irr_pointer (video_driver);
return scm_from_int32 (driver->getFPS ());
}
-
SCM
-video_IVideoDriver_getTexture (SCM video_driver,
- SCM filename)
+IVideoDriver_getName (SCM video_driver)
{
- video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_pointer (video_driver);
- video::ITexture* texture = driver->getTexture (scm_to_utf8_stringn (filename, NULL));
- return scm_from_pointer ((void*) texture, NULL);
+ 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 (cfilename);
+ free (cfilename);
+ return scm_from_irr_pointer ("<texture>", (void*) texture);
+}
SCM
-video_IVideoDriver_setMaterial (SCM video_driver,
- SCM material)
+IVideoDriver_setMaterial (SCM video_driver,
+ SCM material)
{
- video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_pointer (video_driver);
- driver->setMaterial (*((video::SMaterial*) scm_to_pointer (material)));
+ video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_irr_pointer (video_driver);
+ driver->setMaterial (*((video::SMaterial*) scm_to_irr_pointer (material)));
return SCM_UNSPECIFIED;
}
-
SCM
-video_IVideoDriver_setTransform (SCM video_driver,
- SCM state,
- SCM mat)
+IVideoDriver_setTransform (SCM video_driver,
+ SCM state,
+ SCM mat)
{
- video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_pointer (video_driver);
+ video::IVideoDriver* driver = (video::IVideoDriver*) scm_to_irr_pointer (video_driver);
driver->setTransform (scm_to_transformation_state (state),
scm_to_matrix4 (mat));
return SCM_UNSPECIFIED;
}
-extern "C" {
-
- void
- init_video_driver (void)
- {
- DEFINE_GSUBR ("video_IVideoDriver_beginScene", 6, 0, 0, video_IVideoDriver_beginScene);
- DEFINE_GSUBR ("video_IVideoDriver_drawVertexPrimitiveList", 5, 0, 1,
- video_IVideoDriver_drawVertexPrimitiveList);
- DEFINE_GSUBR ("video_IVideoDriver_endScene", 1, 0, 0, video_IVideoDriver_endScene);
- DEFINE_GSUBR ("video_IVideoDriver_getFPS", 1, 0, 0, video_IVideoDriver_getFPS);
- DEFINE_GSUBR ("video_IVideoDriver_getTexture", 2, 0, 0, video_IVideoDriver_getTexture);
- DEFINE_GSUBR ("video_IVideoDriver_setMaterial", 2, 0, 0, video_IVideoDriver_setMaterial);
- DEFINE_GSUBR ("video_IVideoDriver_setTransform", 3, 0, 0, video_IVideoDriver_setTransform);
- }
-
+void
+init_video_driver (void)
+{
+ DEFINE_GSUBR ("IVideoDriver_beginScene", 6, 0, 0, IVideoDriver_beginScene);
+ DEFINE_GSUBR ("IVideoDriver_drawVertexPrimitiveList", 5, 0, 1,
+ 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);
}
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;
}