]> git.jsancho.org Git - guile-irrlicht.git/blob - irrlicht/bindings/video.scm
TOC with direct C++
[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 ;; irr_video_E_TRANSFORMATION_STATE enum
137 (define-public ETS_VIEW        0)
138 (define-public ETS_WORLD       1)
139 (define-public ETS_PROJECTION  2)
140 (define-public ETS_TEXTURE_0   3)
141 (define-public ETS_TEXTURE_1   4)
142 (define-public ETS_TEXTURE_2   5)
143 (define-public ETS_TEXTURE_3   6)
144 (define-public ETS_TEXTURE_4   7)
145 (define-public ETS_TEXTURE_5   8)
146 (define-public ETS_TEXTURE_6   9)
147 (define-public ETS_TEXTURE_7  10)
148 (define-public ETS_COUNT      11)
149
150 ;; irr_video_E_VERTEX_TYPE enum
151 (define-public EVT_STANDARD 0)
152 (define-public EVT_2TCOORDS 1)
153 (define-public EVT_TANGENTS 2)
154
155 ;; irr_video_E_INDEX_TYPE enum
156 (define-public EIT_16BIT 0)
157 (define-public EIT_32BIT 1)
158
159 ;; scolor struct
160 (define-public scolor
161   (list uint8 uint8 uint8 uint8))
162
163 (define-public (scolor->pointer data)
164   (make-c-struct scolor (reverse data)))
165
166 ;; Driver functions
167 (define-foreign begin-scene
168   int "irr_video_beginScene" (list '* int int '* '* '*))
169
170 (define-foreign draw-vertex-primitive-list
171   void "irr_video_drawVertexPrimitiveList" (list '* '* int '* int int int int))
172
173 (define-foreign end-scene
174   int "irr_video_endScene" (list '*))
175
176 (define-foreign get-fps
177   int "irr_video_getFPS" (list '*))
178
179 (define-foreign get-texture
180   '* "irr_video_getTexture" (list '* '*))
181
182 (define-foreign get-video-driver-name
183   '* "irr_video_getName" (list '*))
184
185 (define-foreign set-material
186   void "irr_video_setMaterial" (list '* '*))
187
188 (define-foreign set-transform
189   void "irr_video_setTransform" (list '* int '*))
190
191 ;; s3dvertex struct
192 (define-wrapped-pointer-type s3dvertex-type
193   s3dvertex?
194   pointer->s3dvertex s3dvertex->pointer
195   (lambda (vertex port)
196     (format port "#<s3dvertex ~x>"
197             (pointer-address (s3dvertex->pointer vertex)))))
198
199 (export pointer->s3dvertex
200         s3dvertex->pointer)
201
202 (define-public s3dvertex
203   (list ffi-core:vector3df
204         ffi-core:vector3df
205         scolor
206         ffi-core:vector2df))
207
208 ;; smateriallayer struct
209 (define-public smateriallayer
210   (list '* uint8 uint8 uint8 uint8 uint8 int8 '* '*))
211
212 ;; smaterial struct
213 (define-wrapped-pointer-type smaterial-type
214   smaterial?
215   pointer->smaterial smaterial->pointer
216   (lambda (material port)
217     (format port "#<smaterial ~x>"
218             (pointer-address (smaterial->pointer material)))))
219
220 (export pointer->smaterial
221         smaterial->pointer)
222
223 (define-public smaterial
224   (list smateriallayer smateriallayer smateriallayer smateriallayer  ; textureLayer[4]
225         uint32  ; materialType
226         scolor  ; ambientColor
227         scolor  ; diffuseColor
228         scolor  ; emissiveColor
229         scolor  ; specularColor
230         float   ; shininess
231         float   ; materialTypeParam
232         float   ; materialTypeParam2
233         float   ; thickness
234         uint8   ; zBuffer
235         uint8   ; antiAliasing
236         (bit-field-group
237          (uint8 4)  ; colorMask:4
238          (uint8 3)  ; colorMaterial:3
239          (uint16 4) ; blendOperation:4
240          (uint8 3)  ; polygonOffsetFactor:3
241          (uint16 1) ; polygonOffsetDirection:1
242          (uint8 1)  ; wireframe:1
243          (uint8 1)  ; pointCloud:1
244          (uint8 1)  ; gouraudShading:1
245          (uint8 1)  ; lighting:1
246          (uint8 1)  ; zWriteEnable:1
247          (uint8 1)  ; backfaceCulling:1
248          (uint8 1)  ; frontfaceCulling:1
249          (uint8 1)  ; fogEnable:1
250          (uint8 1)  ; normalizeNormals:1
251          (uint8 1)  ; useMipMaps:1
252         )))
253
254 (define-foreign make-c-material
255   '* "makeMaterial" (list))