]> git.jsancho.org Git - guile-irrlicht.git/commitdiff
set-material-texture! get-texture
authorJavier Sancho <jsf@jsancho.org>
Mon, 16 Mar 2020 18:14:38 +0000 (19:14 +0100)
committerJavier Sancho <jsf@jsancho.org>
Mon, 16 Mar 2020 18:14:38 +0000 (19:14 +0100)
Makefile.am
irrlicht.scm
irrlicht/scene.scm
irrlicht/video.scm [new file with mode: 0644]
src/guile-irrlicht.cpp
src/scene-node.cpp
src/scene-node.h
src/texture.cpp [new file with mode: 0644]
src/texture.h [new file with mode: 0644]
src/video-driver.cpp
src/video-driver.h

index a6410566ed93dbedb67524b92797a4ab55a2780d..2a5fc9e5c9603b1b348d99333d9a988b02104deb 100644 (file)
@@ -38,6 +38,7 @@ libguile_irrlicht_la_SOURCES = \
   src/reference-counted.cpp \
   src/scene-manager.cpp \
   src/scene-node.cpp \
+  src/texture.cpp \
   src/vector3d.cpp \
   src/video-driver.cpp \
   src/wchar.cpp
@@ -72,4 +73,5 @@ SOURCES = \
   irrlicht/device.scm \
   irrlicht/gui.scm \
   irrlicht/irr.scm \
-  irrlicht/scene.scm
+  irrlicht/scene.scm \
+  irrlicht/video.scm
index 1b635f2dc4365aea0e47d8f6d4e41bb2b8177568..57ecbbcae71786d90337b3c4533908f788935196 100644 (file)
@@ -26,7 +26,8 @@
          '((irrlicht device)
            (irrlicht gui)
            (irrlicht irr)
-           (irrlicht scene)))
+           (irrlicht scene)
+           (irrlicht video)))
         (current-interface
          (module-public-interface (current-module))))
     (for-each
index 0053b9386854a1c7b5cbd0399f04d680715d1c8d..f3191a0b808844dd1c112d86e26352b0a79a9eda 100644 (file)
@@ -22,6 +22,7 @@
   #:export (add-animated-mesh-scene-node
             get-mesh
             set-material-flag!
+            set-material-texture!
             set-md2-animation!))
 
 (load-extension "libguile-irrlicht" "init_guile_irrlicht")
diff --git a/irrlicht/video.scm b/irrlicht/video.scm
new file mode 100644 (file)
index 0000000..77e3d21
--- /dev/null
@@ -0,0 +1,24 @@
+;;; guile-irrlicht --- FFI bindings for Irrlicht Engine
+;;; Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+;;;
+;;; This file is part of guile-irrlicht.
+;;;
+;;; Guile-irrlicht is free software; you can redistribute it and/or modify
+;;; it under the terms of the GNU Lesser General Public License as
+;;; published by the Free Software Foundation; either version 3 of the
+;;; License, or (at your option) any later version.
+;;;
+;;; Guile-irrlicht is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;;; General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Lesser General Public
+;;; License along with guile-irrlicht.  If not, see
+;;; <http://www.gnu.org/licenses/>.
+
+
+(define-module (irrlicht video)
+  #:export (get-texture))
+
+(load-extension "libguile-irrlicht" "init_guile_irrlicht")
index d80a5dc19950237f1d03e5b40a545816fd524a45..898815e5c00c06a04d8aba2f8f753fb588015143 100644 (file)
@@ -31,6 +31,7 @@
 #include "reference-counted.h"
 #include "scene-manager.h"
 #include "scene-node.h"
+#include "texture.h"
 #include "video-driver.h"
 
 extern "C" {
@@ -48,6 +49,7 @@ extern "C" {
     init_reference_counted ();
     init_scene_manager ();
     init_scene_node ();
+    init_texture ();
     init_video_driver ();
   }
 
index d392aba5200a332fe60ff4c25018723f8f4b16b6..16ddbf6a7fab932d9c9a396b82147f2913ecc5aa 100644 (file)
@@ -21,7 +21,9 @@
 
 #include <irrlicht/irrlicht.h>
 #include <libguile.h>
+#include "animated-mesh-scene-node.h"
 #include "scene-node.h"
+#include "texture.h"
 #include "wrapped.h"
 
 extern "C" {
@@ -30,10 +32,36 @@ extern "C" {
   init_scene_node (void)
   {
     init_scene_node_type ();
+    scm_c_define_gsubr ("set-material-texture!", 3, 0, 0, (scm_t_subr)irr_scene_setMaterialTexture);
   }
 
   DEFINE_WRAPPED_TYPE (irr::scene::ISceneNode*, "scene-node",
                        init_scene_node_type, scene_node_p,
                        wrap_scene_node, unwrap_scene_node);
 
+  SCM
+  irr_scene_setMaterialTexture (SCM wrapped_scene_node,
+                                SCM texture_layer,
+                                SCM texture)
+  {
+    if (animated_mesh_scene_node_p (wrapped_scene_node))
+      {
+        unwrap_animated_mesh_scene_node (wrapped_scene_node)->
+          setMaterialTexture (scm_to_uint32 (texture_layer),
+                              unwrap_texture (texture));
+      }
+    else if (scene_node_p (wrapped_scene_node))
+      {
+        unwrap_scene_node (wrapped_scene_node)->
+          setMaterialTexture (scm_to_uint32 (texture_layer),
+                              unwrap_texture (texture));
+      }
+    else
+      {
+        scm_error (scm_arg_type_key, NULL, "Cannot set material texture to object: ~S",
+                   scm_list_1 (wrapped_scene_node), scm_list_1 (wrapped_scene_node));
+      }
+    return SCM_UNSPECIFIED;
+  }
+
 }
index 64c3626ce48ec2be3a3e3087d4c4f9a92d30a29b..c41d3cc8e05599456a2632591880a40fc0436e01 100644 (file)
@@ -33,6 +33,12 @@ extern "C" {
 
   DECLARE_WRAPPED_TYPE (irr::scene::ISceneNode*, init_scene_node_type,
                         scene_node_p, wrap_scene_node, unwrap_scene_node);
+
+  SCM
+  irr_scene_setMaterialTexture (SCM wrapped_scene_node,
+                                SCM texture_layer,
+                                SCM texture);
+
 }
 
 #endif
diff --git a/src/texture.cpp b/src/texture.cpp
new file mode 100644 (file)
index 0000000..5dba655
--- /dev/null
@@ -0,0 +1,38 @@
+/* guile-irrlicht --- GNU Guile bindings for Irrlicht Engine
+
+   Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+
+   This file is part of guile-irrlicht.
+
+   guile-irrlicht is free software; you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 3 of the
+   License, or (at your option) any later version.
+
+   guile-irrlicht is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with guile-irrlicht. If not, see
+   <http://www.gnu.org/licenses/>.
+*/
+
+#include <irrlicht/irrlicht.h>
+#include <libguile.h>
+#include "texture.h"
+
+extern "C" {
+
+  void
+  init_texture (void)
+  {
+    init_texture_type ();
+  }
+
+  DEFINE_WRAPPED_TYPE (irr::video::ITexture*, "texture",
+                       init_texture_type, texture_p,
+                       wrap_texture, unwrap_texture);
+
+}
diff --git a/src/texture.h b/src/texture.h
new file mode 100644 (file)
index 0000000..f6c1ec9
--- /dev/null
@@ -0,0 +1,39 @@
+/* guile-irrlicht --- GNU Guile bindings for Irrlicht Engine
+
+   Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+
+   This file is part of guile-irrlicht.
+
+   guile-irrlicht is free software; you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 3 of the
+   License, or (at your option) any later version.
+
+   guile-irrlicht is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with guile-irrlicht. If not, see
+   <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __GUILE_IRRLICHT_TEXTURE_H_INCLUDED__
+#define __GUILE_IRRLICHT_TEXTURE_H_INCLUDED__
+
+#include <irrlicht/irrlicht.h>
+#include <libguile.h>
+#include "wrapped.h"
+
+extern "C" {
+
+  void
+  init_texture (void);
+
+  DECLARE_WRAPPED_TYPE (irr::video::ITexture*, init_texture_type,
+                        texture_p, wrap_texture, unwrap_texture);
+
+}
+
+#endif
index b768f58e5c81c7d506a7f3faa19a375543635362..632f0dec46a8170ec7e4a56fcfc8dadefd157139 100644 (file)
@@ -23,6 +23,7 @@
 #include <libguile.h>
 
 #include "device.h"
+#include "texture.h"
 #include "video-driver.h"
 #include "wrapped.h"
 
@@ -32,6 +33,7 @@ extern "C" {
   init_video_driver (void)
   {
     init_video_driver_type ();
+    scm_c_define_gsubr ("get-texture", 2, 0, 0, (scm_t_subr)irr_video_getTexture);
     scm_c_define_gsubr ("get-video-driver", 1, 0, 0, (scm_t_subr)irr_getVideoDriver);
   }
 
@@ -39,6 +41,15 @@ extern "C" {
                        init_video_driver_type, video_driver_p,
                        wrap_video_driver, unwrap_video_driver);
 
+  SCM
+  irr_video_getTexture (SCM wrapped_video_driver,
+                        SCM filename)
+  {
+    irr::video::IVideoDriver* driver = unwrap_video_driver (wrapped_video_driver);
+    irr::video::ITexture* texture = driver->getTexture (scm_to_utf8_stringn (filename, NULL));
+    return wrap_texture (texture);
+  }
+
   SCM
   irr_getVideoDriver (SCM wrapped_obj)
   {
index 7e3f7279acb09cd7ca329e2978ca13ae4a294f0b..5137ca47e9d74e92dfb05e67f173ee364c7ea1d2 100644 (file)
@@ -34,6 +34,10 @@ extern "C" {
   DECLARE_WRAPPED_TYPE (irr::video::IVideoDriver*, init_video_driver_type,
                         video_driver_p, wrap_video_driver, unwrap_video_driver);
 
+  SCM
+  irr_video_getTexture (SCM wrapped_video_driver,
+                        SCM filename);
+
   SCM
   irr_getVideoDriver (SCM wrapped_obj);