]> git.jsancho.org Git - guile-irrlicht.git/blob - irrlicht/bindings/video.scm
Set material for video driver
[guile-irrlicht.git] / irrlicht / bindings / video.scm
1 ;;; guile-irrlicht --- FFI bindings for Irrlicht Engine
2 ;;; Copyright (C) 2019 Javier Sancho <jsf@jsancho.org>
3 ;;;
4 ;;; This file is part of guile-irrlicht.
5 ;;;
6 ;;; Guile-irrlicht is free software; you can redistribute it and/or modify
7 ;;; it under the terms of the GNU Lesser General Public License as
8 ;;; published by the Free Software Foundation; either version 3 of the
9 ;;; License, or (at your option) any later version.
10 ;;;
11 ;;; Guile-irrlicht is distributed in the hope that it will be useful, but
12 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 ;;; General Public License for more details.
15 ;;;
16 ;;; You should have received a copy of the GNU Lesser General Public
17 ;;; License along with guile-irrlicht.  If not, see
18 ;;; <http://www.gnu.org/licenses/>.
19
20
21 (define-module (irrlicht bindings video)
22   #:use-module (system foreign)
23   #:use-module ((irrlicht bindings core) #:prefix ffi-core:)
24   #:use-module (irrlicht util foreign))
25
26 ;; irr_video_E_BLEND_OPERATION enum
27 (define-public EBO_NONE         0)
28 (define-public EBO_ADD          1)
29 (define-public EBO_SUBTRACT     2)
30 (define-public EBO_REVSUBTRACT  3)
31 (define-public EBO_MIN          4)
32 (define-public EBO_MAX          5)
33 (define-public EBO_MIN_FACTOR   6)
34 (define-public EBO_MAX_FACTOR   7)
35 (define-public EBO_MIN_ALPHA    8)
36 (define-public EBO_MAX_ALPHA    9)
37
38 ;; irr_video_E_COMPARISON_FUNC enum
39 (define-public ECFN_NEVER         0)
40 (define-public ECFN_LESSEQUAL     1)
41 (define-public ECFN_EQUAL         2)
42 (define-public ECFN_LESS          3)
43 (define-public ECFN_NOTEQUAL      4)
44 (define-public ECFN_GREATEREQUAL  5)
45 (define-public ECFN_GREATER       6)
46 (define-public ECFN_ALWAYS        7)
47
48 ;; irr_video_E_COLOR_PLANE enum
49 (define-public ECP_NONE   0)
50 (define-public ECP_ALPHA  1)
51 (define-public ECP_RED    2)
52 (define-public ECP_GREEN  4)
53 (define-public ECP_BLUE   8)
54 (define-public ECP_RGB   14)
55 (define-public ECP_ALL   15)
56
57 ;; irr_video_E_ANTI_ALIASING_MODE enum
58 (define-public EAAM_OFF                 0)
59 (define-public EAAM_SIMPLE              1)
60 (define-public EAAM_QUALITY             3)
61 (define-public EAAM_LINE_SMOOTH         4)
62 (define-public EAAM_POINT_SMOOTH        8)
63 (define-public EAAM_FULL_BASIC         15)
64 (define-public EAAM_ALPHA_TO_COVERAGE  16)
65
66 ;; irr_video_E_COLOR_MATERIAL enum
67 (define-public ECM_NONE                 0)
68 (define-public ECM_DIFFUSE              1)
69 (define-public ECM_AMBIENT              2)
70 (define-public ECM_EMISSIVE             3)
71 (define-public ECM_SPECULAR             4)
72 (define-public ECM_DIFFUSE_AND_AMBIENT  5)
73
74 ;; irr_video_E_DRIVER_TYPE enum
75 (define-public EDT_NULL            0)
76 (define-public EDT_SOFTWARE        1)
77 (define-public EDT_BURNINGSVIDEO   2)
78 (define-public EDT_DIRECT3D8       3)
79 (define-public EDT_DIRECT3D9       4)
80 (define-public EDT_OPENGL          5)
81 (define-public EDT_COUNT           6)
82
83 ;; irr_video_E_MATERIAL_FLAG enum
84 (define-public EMF_WIREFRAME             #x1)
85 (define-public EMF_POINTCLOUD            #x2)
86 (define-public EMF_GOURAUD_SHADING       #x4)
87 (define-public EMF_LIGHTING              #x8)
88 (define-public EMF_ZBUFFER              #x10)
89 (define-public EMF_ZWRITE_ENABLE        #x20)
90 (define-public EMF_BACK_FACE_CULLING    #x40)
91 (define-public EMF_FRONT_FACE_CULLING   #x80)
92 (define-public EMF_BILINEAR_FILTER     #x100)
93 (define-public EMF_TRILINEAR_FILTER    #x200)
94 (define-public EMF_ANISOTROPIC_FILTER  #x400)
95 (define-public EMF_FOG_ENABLE          #x800)
96 (define-public EMF_NORMALIZE_NORMALS  #x1000)
97 (define-public EMF_TEXTURE_WRAP       #x2000)
98 (define-public EMF_ANTI_ALIASING      #x4000)
99 (define-public EMF_COLOR_MASK         #x8000)
100 (define-public EMF_COLOR_MATERIAL    #x10000)
101 (define-public EMF_USE_MIP_MAPS      #x20000)
102 (define-public EMF_BLEND_OPERATION   #x40000)
103 (define-public EMF_POLYGON_OFFSET    #x80000)
104
105 ;; irr_video_E_POLYGON_OFFSET enum
106 (define-public EPO_BACK  0)
107 (define-public EPO_FRONT 1)
108
109 ;;irr_video_E_MATERIAL_TYPE enum
110 (define-public EMT_SOLID                                   0)
111 (define-public EMT_SOLID_2_LAYER                           1)
112 (define-public EMT_LIGHTMAP                                2)
113 (define-public EMT_LIGHTMAP_ADD                            3)
114 (define-public EMT_LIGHTMAP_M2                             4)
115 (define-public EMT_LIGHTMAP_M4                             5)
116 (define-public EMT_LIGHTMAP_LIGHTING                       6)
117 (define-public EMT_LIGHTMAP_LIGHTING_M2                    7)
118 (define-public EMT_LIGHTMAP_LIGHTING_M4                    8)
119 (define-public EMT_DETAIL_MAP                              9)
120 (define-public EMT_SPHERE_MAP                             10)
121 (define-public EMT_REFLECTION_2_LAYER                     11)
122 (define-public EMT_TRANSPARENT_ADD_COLOR                  12)
123 (define-public EMT_TRANSPARENT_ALPHA_CHANNEL              13)
124 (define-public EMT_TRANSPARENT_ALPHA_CHANNEL_REF          14)
125 (define-public EMT_TRANSPARENT_VERTEX_ALPHA               15)
126 (define-public EMT_TRANSPARENT_REFLECTION_2_LAYER         16)
127 (define-public EMT_NORMAL_MAP_SOLID                       17)
128 (define-public EMT_NORMAL_MAP_TRANSPARENT_ADD_COLOR       18)
129 (define-public EMT_NORMAL_MAP_TRANSPARENT_VERTEX_ALPHA    19)
130 (define-public EMT_PARALLAX_MAP_SOLID                     20)
131 (define-public EMT_PARALLAX_MAP_TRANSPARENT_ADD_COLOR     21)
132 (define-public EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA  22)
133 (define-public EMT_ONETEXTURE_BLEND                       23)
134 (define-public EMT_FORCE_32BIT                    #x7fffffff)
135
136
137 ;; scolor struct
138 (define-public scolor
139   (list uint8 uint8 uint8 uint8))
140
141 (define-public (scolor->pointer data)
142   (make-c-struct scolor (reverse data)))
143
144 ;; Driver functions
145 (define-foreign begin-scene
146   int "irr_video_beginScene" (list '* int int '* '* '*))
147
148 (define-foreign end-scene
149   int "irr_video_endScene" (list '*))
150
151 (define-foreign get-fps
152   int "irr_video_getFPS" (list '*))
153
154 (define-foreign get-texture
155   '* "irr_video_getTexture" (list '* '*))
156
157 (define-foreign get-video-driver-name
158   '* "irr_video_getName" (list '*))
159
160 (define-foreign set-material
161   void "irr_video_setMaterial" (list '* '*))
162
163 ;; s3dvertex struct
164 (define-wrapped-pointer-type s3dvertex-type
165   s3dvertex?
166   pointer->s3dvertex s3dvertex->pointer
167   (lambda (vertex port)
168     (format port "#<s3dvertex ~x>"
169             (pointer-address (s3dvertex->pointer vertex)))))
170
171 (export pointer->s3dvertex
172         s3dvertex->pointer)
173
174 (define-public s3dvertex
175   (list ffi-core:vector3df
176         ffi-core:vector3df
177         scolor
178         ffi-core:vector2df))
179
180 ;; smateriallayer struct
181 (define-public smateriallayer
182   (list '* uint8 uint8 uint8 uint8 uint8 int8 '* '*))
183
184 ;; smaterial struct
185 (define-wrapped-pointer-type smaterial-type
186   smaterial?
187   pointer->smaterial smaterial->pointer
188   (lambda (material port)
189     (format port "#<smaterial ~x>"
190             (pointer-address (smaterial->pointer material)))))
191
192 (export pointer->smaterial
193         smaterial->pointer)
194
195 (define-public smaterial
196   (list smateriallayer smateriallayer smateriallayer smateriallayer  ; textureLayer[4]
197         uint32  ; materialType
198         scolor  ; ambientColor
199         scolor  ; diffuseColor
200         scolor  ; emissiveColor
201         scolor  ; specularColor
202         float   ; shininess
203         float   ; materialTypeParam
204         float   ; materialTypeParam2
205         float   ; thickness
206         uint8   ; zBuffer
207         uint8   ; antiAliasing
208         (bit-field-group
209          (uint8 4)  ; colorMask:4
210          (uint8 3)  ; colorMaterial:3
211          (uint32 4) ; blendOperation:4
212          (uint8 3)  ; polygonOffsetFactor:3
213          (uint32 1) ; polygonOffsetDirection:1
214          (uint8 1)  ; wireframe:1
215          (uint8 1)  ; pointCloud:1
216          (uint8 1)  ; gouraudShading:1
217          (uint8 1)  ; lighting:1
218          (uint8 1)  ; zWriteEnable:1
219          (uint8 1)  ; backfaceCulling:1
220          (uint8 1)  ; frontfaceCulling:1
221          (uint8 1)  ; fogEnable:1
222          (uint8 1)  ; normalizeNormals:1
223          (uint8 1)  ; useMipMaps:1
224         )))