X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=irrlicht%2Fvideo.scm;h=f4feff4f4b552f6ac5d0b1f2affcb4b4b14169fa;hb=e1e79af4472feb78b4ec672f768eb8fdd10670fc;hp=77e3d21415f7b3ce68815c7a903ff3da0f19657f;hpb=fb9011bf9160be890e0a6b98fcff9ed95ae0bd77;p=guile-irrlicht.git diff --git a/irrlicht/video.scm b/irrlicht/video.scm index 77e3d21..f4feff4 100644 --- a/irrlicht/video.scm +++ b/irrlicht/video.scm @@ -19,6 +19,134 @@ (define-module (irrlicht video) - #:export (get-texture)) + #:use-module (oop goops) + #:use-module (ice-9 optargs) + #:use-module (irrlicht base) + #:use-module (irrlicht foreign)) -(load-extension "libguile-irrlicht" "init_guile_irrlicht") + +;; ITexture +(define-class () + (irr-class #:init-value "ITexture")) + +(export ) + + +;; SMaterial +(define-class () + (irr-class #:init-value "SMaterial")) + +(define* (make-material #:key + (material-type 'solid) + (ambient-color '(255 255 255 255)) + (diffuse-color '(255 255 255 255)) + (emissive-color '(0 0 0 0)) + (specular-color '(255 255 255 255)) + (shininess 0) + (material-type-param 0) + (material-type-param-2 0) + (thickness 1) + (z-buffer 'less-equal) + (anti-aliasing 'simple) + (color-mask 'all) + (color-material 'diffuse) + (blend-operation 'none) + (polygon-offset-factor 0) + (polygon-offset-direction 'front) + (wireframe #f) + (point-cloud #f) + (gouraud-shading #t) + (lighting #t) + (z-write-enable #t) + (backface-culling #t) + (frontface-culling #f) + (fog-enable #f) + (normalize-normals #f) + (use-mip-maps #t)) + (let ((SMaterial_make (get-irrlicht-proc "SMaterial_make"))) + (SMaterial_make #:material-type material-type #:ambient-color ambient-color + #:diffuse-color diffuse-color #:emissive-color emissive-color + #:specular-color specular-color #:shininess shininess + #:material-type-param material-type-param + #:material-type-param-2 material-type-param-2 + #:thickness thickness #:z-buffer z-buffer #:anti-aliasing anti-aliasing + #:color-mask color-mask #:color-material color-material + #:blend-operation blend-operation + #:polygon-offset-factor polygon-offset-factor + #:polygon-offset-direction polygon-offset-direction + #:wireframe wireframe #:point-cloud point-cloud + #:gouraud-shading gouraud-shading #:lighting lighting + #:z-write-enable z-write-enable #:backface-culling backface-culling + #:frontface-culling frontface-culling #:fog-enable fog-enable + #:normalize-normals normalize-normals #:use-mip-maps use-mip-maps))) + +(export make-material) + + +;; IVideoDriver +(define-class () + (irr-class #:init-value "IVideoDriver")) + +(define-method (begin-scene (video-driver ) . rest) + (let-keywords rest #f + ((back-buffer #t) + (z-buffer #t) + (color '(255 0 0 0)) + video-data + source-rect) + ((get-irrlicht-proc "beginScene" video-driver) + video-driver + back-buffer + z-buffer + color + video-data + source-rect))) + +(define-method (draw-vertex-primitive-list (video-driver ) vertices indices . rest) + (let-keywords rest #f + ((v-type 'standard) + (p-type 'triangles)) + (let ((drawVertexPrimitiveList (get-irrlicht-proc "drawVertexPrimitiveList" video-driver))) + (drawVertexPrimitiveList video-driver vertices indices v-type p-type)))) + +(define-method (end-scene (video-driver )) + ((get-irrlicht-proc "endScene" video-driver) + video-driver)) + +(define-method (get-fps (video-driver )) + (let ((getFPS (get-irrlicht-proc "getFPS" video-driver))) + (getFPS video-driver))) + +(define-method (get-name (video-driver )) + (let ((getName (get-irrlicht-proc "getName" video-driver))) + (getName video-driver))) + +(define-method (get-texture (video-driver ) filename) + (let ((getTexture (get-irrlicht-proc "getTexture" video-driver))) + (getTexture video-driver filename))) + +(define-method (set-material! (video-driver ) (material )) + (let ((setMaterial (get-irrlicht-proc "setMaterial" video-driver))) + (setMaterial video-driver material))) + +(define-method (set-transform! (video-driver ) state mat) + (let ((setTransform (get-irrlicht-proc "setTransform" video-driver))) + (setTransform video-driver state mat))) + +(export begin-scene draw-vertex-primitive-list end-scene get-fps get-name get-texture + set-material! set-transform!) + + +;; S3DVertex +(define-class () + (irr-class #:init-value "S3DVertex")) + +(define-method (get-position (vertex3d )) + (let ((S3DVertex_Pos (get-irrlicht-proc "S3DVertex_Pos"))) + (S3DVertex_Pos vertex3d))) + +(define (make-vertex3d position normal color tcoords) + (let ((S3DVertex_make (get-irrlicht-proc "S3DVertex_make"))) + (S3DVertex_make position normal color tcoords))) + +(export get-position make-vertex3d)