+SCM
+S3DVertex_make (SCM position,
+ SCM normal,
+ SCM color,
+ SCM tcoords)
+{
+ video::S3DVertex* vertex =
+ new video::S3DVertex (scm_to_vector3df (position),
+ scm_to_vector3df (normal),
+ scm_to_color (color),
+ scm_to_vector2df (tcoords));
+ return scm_from_irr_pointer ("<vertex3d>", (void*) vertex);
+}
+
+SCM
+S3DVertex_Pos (SCM vertex) {
+ video::S3DVertex* s3dvertex = (video::S3DVertex*) scm_to_irr_pointer (vertex);
+ return scm_from_vector3df (s3dvertex->Pos);
+}
+
+void
+init_vertex3d (void)
+{
+ DEFINE_GSUBR ("S3DVertex_make", 4, 0, 0, S3DVertex_make);
+ DEFINE_GSUBR ("S3DVertex_Pos", 1, 0, 0, S3DVertex_Pos);
+}
+
+video::E_VERTEX_TYPE
+scm_to_vertex_type (SCM vertex_type)
+{
+ char* type_name = scm_to_utf8_string (scm_symbol_to_string (vertex_type));
+ video::E_VERTEX_TYPE type;
+
+ if (!strcmp (type_name, "standard"))
+ {
+ type = video::EVT_STANDARD;
+ }
+ else if (!strcmp (type_name, "2tcoords"))
+ {
+ type = video::EVT_2TCOORDS;
+ }
+ else if (!strcmp (type_name, "tangents"))
+ {
+ type = video::EVT_TANGENTS;
+ }
+ else
+ {
+ scm_error (scm_arg_type_key, NULL, "Wrong vertex_type: ~S",
+ scm_list_1 (vertex_type), scm_list_1 (vertex_type));
+ }
+
+ free (type_name);
+ return type;