2 ;;; Copyright (C) 2013 Daniel Hartwig <mandyke@gmail.com>
4 ;;; Figl is free software: you can redistribute it and/or modify it
5 ;;; under the terms of the GNU Lesser General Public License as
6 ;;; published by the Free Software Foundation, either version 3 of the
7 ;;; License, or (at your option) any later version.
9 ;;; Figl is distributed in the hope that it will be useful, but WITHOUT
10 ;;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11 ;;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
12 ;;; Public License for more details.
14 ;;; You should have received a copy of the GNU Lesser General Public
15 ;;; License along with this program. If not, see
16 ;;; <http://www.gnu.org/licenses/>.
20 ;; Mappings from OpenGL to FFI types.
24 (define-module (figl gl types)
25 #:use-module (figl runtime)
26 #:use-module (rnrs bytevectors)
27 #:use-module ((system foreign) #:renamer (symbol-prefix-proc 'ffi:))
77 (else (error "unknown pointer size"))))
79 (define-simple-foreign-type void ffi:void)
80 (define-simple-foreign-type GLboolean ffi:uint8)
81 (define-simple-foreign-type GLbyte ffi:int8)
82 (define-simple-foreign-type GLubyte ffi:uint8)
83 (define-simple-foreign-type GLchar ffi:int8)
84 (define-simple-foreign-type Glshort ffi:int16)
85 (define-simple-foreign-type GLushort ffi:uint16)
86 (define-simple-foreign-type GLint ffi:int32)
87 (define-simple-foreign-type GLuint ffi:uint32)
88 (define-simple-foreign-type GLsizei ffi:int32)
89 (define-simple-foreign-type GLenum ffi:uint32)
90 (define-simple-foreign-type GLintptr %ptr)
91 (define-simple-foreign-type GLsizeiptr %ptr)
92 (define-simple-foreign-type GLbitfield ffi:uint32)
93 (define-simple-foreign-type GLfloat ffi:float)
94 (define-simple-foreign-type GLclampf ffi:float)
95 (define-simple-foreign-type GLdouble ffi:double)
96 (define-simple-foreign-type GLclampd ffi:double)
97 (define-simple-foreign-type GLvoid-* '*)
98 (define-simple-foreign-type void-* '*)
99 (define-simple-foreign-type const-GLvoid-* '*)
101 (define (array->pointer x)
104 (ffi:bytevector->pointer x)
107 (define-syntax define-array-foreign-type
109 ((_ name element-type)
110 (define-foreign-type name '*
114 (define-array-foreign-type GLboolean-* GLboolean)
115 (define-array-foreign-type GLchar-* GLchar)
116 (define-array-foreign-type GLdouble-* GLdouble)
117 (define-array-foreign-type GLenum-* GLenum)
118 (define-array-foreign-type GLfloat-* GLfloat)
119 (define-array-foreign-type GLint-* GLint)
120 (define-array-foreign-type GLsizei-* GLsizei)
121 (define-array-foreign-type GLubyte-* GLubyte)
122 (define-array-foreign-type GLuint-* GLuint)
124 (define-array-foreign-type const-GLclampf-* GLclampf)
125 (define-array-foreign-type const-GLdouble-* GLdouble)
126 (define-array-foreign-type const-GLenum-* GLenum)
127 (define-array-foreign-type const-GLfloat-* GLfloat)
128 (define-array-foreign-type const-GLint-* GLint)
129 (define-array-foreign-type const-GLsizei-* GLsizei)
130 (define-array-foreign-type const-GLubyte* GLubyte)
131 (define-array-foreign-type const-GLubyte-* GLubyte)
132 (define-array-foreign-type const-GLuint-* GLuint)
133 (define-array-foreign-type const-GLvoid-* GLvoid)
135 (define-foreign-type const-GLchar-* '*
139 ;; Functions with these types will need special help.
140 (define-simple-foreign-type const-GLchar-** '*)
141 (define-simple-foreign-type const-GLvoid-** '*)