From: jsancho Date: Sun, 4 Dec 2011 08:50:18 +0000 (+0000) Subject: Gacela as Guile modules. X-Git-Url: https://git.jsancho.org/?a=commitdiff_plain;h=905abebe9a3b80a9ae2723024c6df8a728076157;p=gacela.git Gacela as Guile modules. --- diff --git a/src/ftgl.c b/src/ftgl.c new file mode 100644 index 0000000..2dc79a0 --- /dev/null +++ b/src/ftgl.c @@ -0,0 +1,149 @@ +/* Gacela, a GNU Guile extension for fast games development + Copyright (C) 2009 by Javier Sancho Fernandez + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License + along with this program. If not, see . +*/ + +#include +#include + +struct font +{ + SCM filename; + FTGLfont *font_address; +}; + +static scm_t_bits font_tag; + +SCM +make_font (SCM file, FTGLfont *font_address) +{ + SCM smob; + struct font *font; + + font = (struct font *) scm_gc_malloc (sizeof (struct font), "font"); + + font->filename = SCM_BOOL_F; + font->font_address = NULL; + + SCM_NEWSMOB (smob, font_tag, font); + + font->filename = file; + font->font_address = font_address; + + return smob; +} + +FTGLfont * +get_font_address (SCM font_smob) +{ + struct font *font; + + scm_assert_smob_type (font_tag, font_smob); + font = (struct font *) SCM_SMOB_DATA (font_smob); + return font->font_address; +} + +SCM +mark_font (SCM font_smob) +{ + struct font *font = (struct font *) SCM_SMOB_DATA (font_smob); + + scm_gc_mark (font->filename); + + return SCM_BOOL_F; +} + +size_t +free_font (SCM font_smob) +{ + struct font *font = (struct font *) SCM_SMOB_DATA (font_smob); + + ftglDestroyFont (font->font_address); + scm_gc_free (font, sizeof (struct font), "font"); + + return 0; +} + +static int +print_font (SCM font_smob, SCM port, scm_print_state *pstate) +{ + struct font *font = (struct font *) SCM_SMOB_DATA (font_smob); + + scm_puts ("#filename, port); + scm_puts ("\">", port); + + /* non-zero means success */ + return 1; +} + + +SCM +gacela_ftglCreateTextureFont (SCM file) +{ + FTGLfont *font_address = ftglCreateTextureFont (scm_to_locale_string (file)); + + if (font_address) { + return make_font (file, font_address); + } + else { + return SCM_BOOL_F; + } +} + +SCM +gacela_ftglSetFontFaceSize (SCM font, SCM size, SCM res) +{ + return scm_from_int (ftglSetFontFaceSize (get_font_address (font), scm_to_int (size), scm_to_int (res))); +} + +SCM +gacela_ftglSetFontCharMap (SCM font, SCM encoding) +{ + return scm_from_int (ftglSetFontCharMap (get_font_address (font), scm_to_int (encoding))); +} + +SCM +gacela_ftglRenderFont (SCM font, SCM string, SCM mode) +{ + ftglRenderFont (get_font_address (font), scm_to_locale_string(string), scm_to_int (mode)); + return SCM_UNSPECIFIED; +} + + +void +init_gacela_ftgl (void *data) +{ + font_tag = scm_make_smob_type ("font", sizeof (struct font)); + scm_set_smob_mark (font_tag, mark_font); + scm_set_smob_free (font_tag, free_font); + scm_set_smob_print (font_tag, print_font); + // scm_set_smob_equalp (surface_tag, equalp_surface); + + scm_c_define ("ft_encoding_unicode", scm_from_int (ft_encoding_unicode)); + scm_c_define ("FTGL_RENDER_ALL", scm_from_int (FTGL_RENDER_ALL)); + + scm_c_define_gsubr ("ftglCreateTextureFont", 1, 0, 0, gacela_ftglCreateTextureFont); + scm_c_define_gsubr ("ftglSetFontFaceSize", 3, 0, 0, gacela_ftglSetFontFaceSize); + scm_c_define_gsubr ("ftglSetFontCharMap", 2, 0, 0, gacela_ftglSetFontCharMap); + scm_c_define_gsubr ("ftglRenderFont", 3, 0, 0, gacela_ftglRenderFont); +} + + +void +scm_init_gacela_ftgl () +{ + init_gacela_ftgl (NULL); +} diff --git a/src/ftgl.scm b/src/ftgl.scm new file mode 100644 index 0000000..ffcacb0 --- /dev/null +++ b/src/ftgl.scm @@ -0,0 +1,25 @@ +;;; Gacela, a GNU Guile extension for fast games development +;;; Copyright (C) 2009 by Javier Sancho Fernandez +;;; +;;; This program is free software: you can redistribute it and/or modify +;;; it under the terms of the GNU General Public License as published by +;;; the Free Software Foundation, either version 3 of the License, or +;;; (at your option) any later version. +;;; +;;; This program 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 General Public License +;;; along with this program. If not, see . + + +(define-module (gacela ftgl)) + +(load-extension "libguile-gacela-ftgl" "scm_init_gacela_ftgl") + +(module-map (lambda (sym var) + (if (not (eq? sym '%module-public-interface)) + (module-export! (current-module) (list sym)))) + (current-module)) diff --git a/src/gacela_FTGL.c b/src/gacela_FTGL.c deleted file mode 100644 index 643707e..0000000 --- a/src/gacela_FTGL.c +++ /dev/null @@ -1,145 +0,0 @@ -/* Gacela, a GNU Guile extension for fast games development - Copyright (C) 2009 by Javier Sancho Fernandez - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program 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 General Public License - along with this program. If not, see . -*/ - -#include -#include -#include "gacela_FTGL.h" - -struct font -{ - SCM filename; - FTGLfont *font_address; -}; - -static scm_t_bits font_tag; - -SCM -make_font (SCM file, FTGLfont *font_address) -{ - SCM smob; - struct font *font; - - font = (struct font *) scm_gc_malloc (sizeof (struct font), "font"); - - font->filename = SCM_BOOL_F; - font->font_address = NULL; - - SCM_NEWSMOB (smob, font_tag, font); - - font->filename = file; - font->font_address = font_address; - - return smob; -} - -FTGLfont * -get_font_address (SCM font_smob) -{ - struct font *font; - - scm_assert_smob_type (font_tag, font_smob); - font = (struct font *) SCM_SMOB_DATA (font_smob); - return font->font_address; -} - -SCM -mark_font (SCM font_smob) -{ - struct font *font = (struct font *) SCM_SMOB_DATA (font_smob); - - scm_gc_mark (font->filename); - - return SCM_BOOL_F; -} - -size_t -free_font (SCM font_smob) -{ - struct font *font = (struct font *) SCM_SMOB_DATA (font_smob); - - ftglDestroyFont (font->font_address); - scm_gc_free (font, sizeof (struct font), "font"); - - return 0; -} - -static int -print_font (SCM font_smob, SCM port, scm_print_state *pstate) -{ - struct font *font = (struct font *) SCM_SMOB_DATA (font_smob); - - scm_puts ("#filename, port); - scm_puts ("\">", port); - - /* non-zero means success */ - return 1; -} - - -SCM -gacela_ftglCreateTextureFont (SCM file) -{ - FTGLfont *font_address = ftglCreateTextureFont (scm_to_locale_string (file)); - - if (font_address) { - return make_font (file, font_address); - } - else { - return SCM_BOOL_F; - } -} - -SCM -gacela_ftglSetFontFaceSize (SCM font, SCM size, SCM res) -{ - return scm_from_int (ftglSetFontFaceSize (get_font_address (font), scm_to_int (size), scm_to_int (res))); -} - -SCM -gacela_ftglSetFontCharMap (SCM font, SCM encoding) -{ - return scm_from_int (ftglSetFontCharMap (get_font_address (font), scm_to_int (encoding))); -} - -SCM -gacela_ftglRenderFont (SCM font, SCM string, SCM mode) -{ - ftglRenderFont (get_font_address (font), scm_to_locale_string(string), scm_to_int (mode)); - return SCM_UNSPECIFIED; -} - - -void* -FTGL_register_functions (void* data) -{ - font_tag = scm_make_smob_type ("font", sizeof (struct font)); - scm_set_smob_mark (font_tag, mark_font); - scm_set_smob_free (font_tag, free_font); - scm_set_smob_print (font_tag, print_font); - // scm_set_smob_equalp (surface_tag, equalp_surface); - - scm_c_define ("ft_encoding_unicode", scm_from_int (ft_encoding_unicode)); - scm_c_define ("FTGL_RENDER_ALL", scm_from_int (FTGL_RENDER_ALL)); - - scm_c_define_gsubr ("ftglCreateTextureFont", 1, 0, 0, gacela_ftglCreateTextureFont); - scm_c_define_gsubr ("ftglSetFontFaceSize", 3, 0, 0, gacela_ftglSetFontFaceSize); - scm_c_define_gsubr ("ftglSetFontCharMap", 2, 0, 0, gacela_ftglSetFontCharMap); - scm_c_define_gsubr ("ftglRenderFont", 3, 0, 0, gacela_ftglRenderFont); - - return NULL; -} diff --git a/src/gacela_FTGL.h b/src/gacela_FTGL.h deleted file mode 100644 index 83111e9..0000000 --- a/src/gacela_FTGL.h +++ /dev/null @@ -1,18 +0,0 @@ -/* Gacela, a GNU Guile extension for fast games development - Copyright (C) 2009 by Javier Sancho Fernandez - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program 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 General Public License - along with this program. If not, see . -*/ - -void* FTGL_register_functions (void* data); diff --git a/src/gacela_GL.c b/src/gacela_GL.c deleted file mode 100644 index 541e4ab..0000000 --- a/src/gacela_GL.c +++ /dev/null @@ -1,487 +0,0 @@ -/* Gacela, a GNU Guile extension for fast games development - Copyright (C) 2009 by Javier Sancho Fernandez - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program 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 General Public License - along with this program. If not, see . -*/ - -#include -#include -#include -#include "gacela_GL.h" - - -struct glTexture -{ - GLuint texture_id; - int width, height; -}; - -static scm_t_bits glTexture_tag; - -SCM -make_glTexture (GLuint texture_id) -{ - SCM smob; - struct glTexture *glTexture; - - glTexture = (struct glTexture *) scm_gc_malloc (sizeof (struct glTexture), "glTexture"); - - glTexture->texture_id = 0; - - SCM_NEWSMOB (smob, glTexture_tag, glTexture); - - glTexture->texture_id = texture_id; - - return smob; -} - -GLuint -get_glTexture_id (SCM glTexture_smob) -{ - struct glTexture *glTexture; - - scm_assert_smob_type (glTexture_tag, glTexture_smob); - glTexture = (struct glTexture *) SCM_SMOB_DATA (glTexture_smob); - return glTexture->texture_id; -} - -SCM -get_glTexture_width (SCM glTexture_smob) -{ - struct glTexture *glTexture; - - scm_assert_smob_type (glTexture_tag, glTexture_smob); - glTexture = (struct glTexture *) SCM_SMOB_DATA (glTexture_smob); - return scm_from_int (glTexture->width); -} - -SCM -get_glTexture_height (SCM glTexture_smob) -{ - struct glTexture *glTexture; - - scm_assert_smob_type (glTexture_tag, glTexture_smob); - glTexture = (struct glTexture *) SCM_SMOB_DATA (glTexture_smob); - return scm_from_int (glTexture->height); -} - -SCM -set_glTexture_size (SCM glTexture_smob, SCM width, SCM height) -{ - struct glTexture *glTexture; - - scm_assert_smob_type (glTexture_tag, glTexture_smob); - glTexture = (struct glTexture *) SCM_SMOB_DATA (glTexture_smob); - glTexture->width = scm_to_int (width); - glTexture->height = scm_to_int (height); - return SCM_UNSPECIFIED; -} - -size_t -free_glTexture (SCM glTexture_smob) -{ - struct glTexture *glTexture = (struct glTexture *) SCM_SMOB_DATA (glTexture_smob); - GLuint text[1]; - - text[0] = glTexture->texture_id; - glDeleteTextures (1, &text[0]); - scm_gc_free (glTexture, sizeof (struct glTexture), "glTexture"); - - return 0; -} - - -SCM -gacela_glBegin (SCM mode) -{ - glBegin (scm_to_int (mode)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glClear (SCM mask) -{ - glClear (scm_to_int (mask)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glClearColor (SCM red, SCM green, SCM blue, SCM alpha) -{ - glClearColor (scm_to_double (red), scm_to_double (green), scm_to_double (blue), scm_to_double (alpha)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glClearDepth (SCM depth) -{ - glClearDepth (scm_to_double (depth)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glColor3f (SCM red, SCM green, SCM blue) -{ - glColor3f (scm_to_double (red), scm_to_double (green), scm_to_double (blue)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glColor4f (SCM red, SCM green, SCM blue, SCM alpha) -{ - glColor4f (scm_to_double (red), scm_to_double (green), scm_to_double (blue), scm_to_double (alpha)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glDepthFunc (SCM func) -{ - glDepthFunc (scm_to_int (func)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glEnable (SCM cap) -{ - glEnable (scm_to_int (cap)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glDisable (SCM cap) -{ - glDisable (scm_to_int (cap)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glEnd (void) -{ - glEnd (); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glHint (SCM target, SCM mode) -{ - glHint (scm_to_int (target), scm_to_int (mode)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glLoadIdentity (void) -{ - glLoadIdentity (); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glMatrixMode (SCM mode) -{ - glMatrixMode (scm_to_int (mode)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glRotatef (SCM angle, SCM x, SCM y, SCM z) -{ - glRotatef (scm_to_double (angle), scm_to_double (x), scm_to_double (y), scm_to_double (z)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glShadeModel (SCM mode) -{ - glShadeModel (scm_to_int (mode)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glTranslatef (SCM x, SCM y, SCM z) -{ - glTranslatef (scm_to_double (x), scm_to_double (y), scm_to_double (z)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glVertex2f (SCM x, SCM y) -{ - glVertex2f (scm_to_double (x), scm_to_double (y)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glVertex3f (SCM x, SCM y, SCM z) -{ - glVertex3f (scm_to_double (x), scm_to_double (y), scm_to_double (z)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glViewport (SCM x, SCM y, SCM width, SCM height) -{ - glViewport (scm_to_int (x), scm_to_int (y), scm_to_int (width), scm_to_int (height)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glGenTextures (SCM n) -{ - SCM textures; - int nint = scm_to_int (n); - GLuint text[nint]; - int i; - - textures = scm_list_n (SCM_UNDEFINED); - glGenTextures (nint, &text[0]); - - for (i = nint - 1; i >= 0; i--) { - textures = scm_cons (make_glTexture (text[i]), textures); - } - - return textures; -} - -SCM -gacela_glDeleteTextures (SCM n, SCM textures) -{ - int nint = scm_to_int (n); - GLuint text[nint]; - int i; - - for (i = 0; i < nint; i++) { - text[i] = scm_to_int (scm_list_ref (textures, scm_from_int (i))); - } - - glDeleteTextures (nint, &text[0]); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glBindTexture (SCM target, SCM texture) -{ - glBindTexture (scm_to_int (target), get_glTexture_id (texture)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glTexImage2D (SCM target, SCM level, SCM internalFormat, SCM width, SCM height, SCM border, SCM format, SCM type, SCM pixels) -{ - glTexImage2D (scm_to_int (target), scm_to_int (level), scm_to_int (internalFormat), scm_to_int (width), \ - scm_to_int (height), scm_to_int (border), scm_to_int (format), scm_to_int (type), \ - (GLvoid *)scm_to_int (pixels)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glTexParameteri (SCM target, SCM pname, SCM param) -{ - glTexParameteri (scm_to_int (target), scm_to_int (pname), scm_to_int (param)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glTexCoord2f (SCM s, SCM t) -{ - glTexCoord2f (scm_to_double (s), scm_to_double (t)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glLightfv (SCM light, SCM pname, SCM params) -{ - int n = scm_to_int (scm_length (params)); - GLfloat gl_params[n]; - int i; - - for (i = 0; i < n; i++) { - gl_params[i] = scm_to_double (scm_list_ref (params, scm_from_int (i))); - } - - glLightfv (scm_to_int (light), scm_to_int (pname), gl_params); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glNormal3f (SCM nx, SCM ny, SCM nz) -{ - glNormal3f (scm_to_double (nx), scm_to_double (ny), scm_to_double (nz)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glBlendFunc (SCM sfactor, SCM dfactor) -{ - glBlendFunc (scm_to_int (sfactor), scm_to_int (dfactor)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glOrtho (SCM left, SCM right, SCM bottom, SCM top, SCM near_val, SCM far_val) -{ - glOrtho (scm_to_double (left), scm_to_double (right), scm_to_double (bottom), scm_to_double (top), \ - scm_to_double (near_val), scm_to_double (far_val)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glPushMatrix (void) -{ - glPushMatrix (); - return SCM_UNSPECIFIED; -} - -SCM -gacela_glPopMatrix (void) -{ - glPopMatrix (); - return SCM_UNSPECIFIED; -} - -SCM -gacela_gluPerspective (SCM fovy, SCM aspect, SCM zNear, SCM zFar) -{ - gluPerspective (scm_to_double (fovy), scm_to_double (aspect), scm_to_double (zNear), scm_to_double (zFar)); - return SCM_UNSPECIFIED; -} - -SCM -gacela_gluBuild2DMipmaps (SCM target, SCM internalFormat, SCM width, SCM height, SCM format, SCM type, SCM data) -{ - return scm_from_int (gluBuild2DMipmaps (scm_to_int (target), scm_to_int (internalFormat), scm_to_int (width), \ - scm_to_int (height), scm_to_int (format), scm_to_int (type), \ - (void *)scm_to_int (data))); -} - -SCM -gacela_gluLookAt (SCM eyeX, SCM eyeY, SCM eyeZ, SCM centerX, SCM centerY, SCM centerZ, SCM upX, SCM upY, SCM upZ) -{ - gluLookAt (scm_to_double (eyeX), scm_to_double (eyeY), scm_to_double (eyeZ), \ - scm_to_double (centerX), scm_to_double (centerY), scm_to_double (centerZ), \ - scm_to_double (upX), scm_to_double (upY), scm_to_double (upZ)); - return SCM_UNSPECIFIED; -} - - -void* -GL_register_functions (void* data) -{ - glTexture_tag = scm_make_smob_type ("glTexture", sizeof (struct glTexture)); - scm_set_smob_free (glTexture_tag, free_glTexture); - scm_c_define_gsubr ("texture-w", 1, 0, 0, get_glTexture_width); - scm_c_define_gsubr ("texture-h", 1, 0, 0, get_glTexture_height); - scm_c_define_gsubr ("set-texture-size!", 3, 0, 0, set_glTexture_size); - - // Data types - scm_c_define ("GL_UNSIGNED_BYTE", scm_from_int (GL_UNSIGNED_BYTE)); - - // Primitives - scm_c_define ("GL_POINTS", scm_from_int (GL_POINTS)); - scm_c_define ("GL_LINES", scm_from_int (GL_LINES)); - scm_c_define ("GL_LINE_LOOP", scm_from_int (GL_LINE_LOOP)); - scm_c_define ("GL_LINE_STRIP", scm_from_int (GL_LINE_STRIP)); - scm_c_define ("GL_TRIANGLES", scm_from_int (GL_TRIANGLES)); - scm_c_define ("GL_TRIANGLE_STRIP", scm_from_int (GL_TRIANGLE_STRIP)); - scm_c_define ("GL_TRIANGLE_FAN", scm_from_int (GL_TRIANGLE_FAN)); - scm_c_define ("GL_QUADS", scm_from_int (GL_QUADS)); - scm_c_define ("GL_QUAD_STRIP", scm_from_int (GL_QUAD_STRIP)); - scm_c_define ("GL_POLYGON", scm_from_int (GL_POLYGON)); - - // Matrix Mode - scm_c_define ("GL_MODELVIEW", scm_from_int (GL_MODELVIEW)); - scm_c_define ("GL_PROJECTION", scm_from_int (GL_PROJECTION)); - - // Depth buffer - scm_c_define ("GL_LEQUAL", scm_from_int (GL_LEQUAL)); - scm_c_define ("GL_DEPTH_TEST", scm_from_int (GL_DEPTH_TEST)); - - // Lighting - scm_c_define ("GL_LIGHTING", scm_from_int (GL_LIGHTING)); - scm_c_define ("GL_LIGHT1", scm_from_int (GL_LIGHT1)); - scm_c_define ("GL_AMBIENT", scm_from_int (GL_AMBIENT)); - scm_c_define ("GL_DIFFUSE", scm_from_int (GL_DIFFUSE)); - scm_c_define ("GL_POSITION", scm_from_int (GL_POSITION)); - scm_c_define ("GL_SMOOTH", scm_from_int (GL_SMOOTH)); - - // Blending - scm_c_define ("GL_BLEND", scm_from_int (GL_BLEND)); - scm_c_define ("GL_ONE", scm_from_int (GL_ONE)); - scm_c_define ("GL_ONE_MINUS_SRC_ALPHA", scm_from_int (GL_ONE_MINUS_SRC_ALPHA)); - scm_c_define ("GL_SRC_ALPHA", scm_from_int (GL_SRC_ALPHA)); - - // Fog - scm_c_define ("GL_LINEAR", scm_from_int (GL_LINEAR)); - - // Buffers, Pixel Drawing/Reading - scm_c_define ("GL_RGB", scm_from_int (GL_RGB)); - scm_c_define ("GL_RGBA", scm_from_int (GL_RGBA)); - - // Hints - scm_c_define ("GL_PERSPECTIVE_CORRECTION_HINT", scm_from_int (GL_PERSPECTIVE_CORRECTION_HINT)); - scm_c_define ("GL_NICEST", scm_from_int (GL_NICEST)); - - // Texture mapping - scm_c_define ("GL_TEXTURE_2D", scm_from_int (GL_TEXTURE_2D)); - scm_c_define ("GL_TEXTURE_MAG_FILTER", scm_from_int (GL_TEXTURE_MAG_FILTER)); - scm_c_define ("GL_TEXTURE_MIN_FILTER", scm_from_int (GL_TEXTURE_MIN_FILTER)); - scm_c_define ("GL_LINEAR_MIPMAP_NEAREST", scm_from_int (GL_LINEAR_MIPMAP_NEAREST)); - scm_c_define ("GL_NEAREST", scm_from_int (GL_NEAREST)); - - // glPush/PopAttrib bits - scm_c_define ("GL_DEPTH_BUFFER_BIT", scm_from_int (GL_DEPTH_BUFFER_BIT)); - scm_c_define ("GL_COLOR_BUFFER_BIT", scm_from_int (GL_COLOR_BUFFER_BIT)); - - // OpenGL 1.2 - scm_c_define ("GL_BGR", scm_from_int (GL_BGR)); - scm_c_define ("GL_BGRA", scm_from_int (GL_BGRA)); - - - scm_c_define_gsubr ("glBegin", 1, 0, 0, gacela_glBegin); - scm_c_define_gsubr ("glClear", 1, 0, 0, gacela_glClear); - scm_c_define_gsubr ("glClearColor", 4, 0, 0, gacela_glClearColor); - scm_c_define_gsubr ("glClearDepth", 1, 0, 0, gacela_glClearDepth); - scm_c_define_gsubr ("glColor3f", 3, 0, 0, gacela_glColor3f); - scm_c_define_gsubr ("glColor4f", 4, 0, 0, gacela_glColor4f); - scm_c_define_gsubr ("glDepthFunc", 1, 0, 0, gacela_glDepthFunc); - scm_c_define_gsubr ("glEnable", 1, 0, 0, gacela_glEnable); - scm_c_define_gsubr ("glDisable", 1, 0, 0, gacela_glDisable); - scm_c_define_gsubr ("glEnd", 0, 0, 0, gacela_glEnd); - scm_c_define_gsubr ("glHint", 2, 0, 0, gacela_glHint); - scm_c_define_gsubr ("glLoadIdentity", 0, 0, 0, gacela_glLoadIdentity); - scm_c_define_gsubr ("glMatrixMode", 1, 0, 0, gacela_glMatrixMode); - scm_c_define_gsubr ("glRotatef", 4, 0, 0, gacela_glRotatef); - scm_c_define_gsubr ("glShadeModel", 1, 0, 0, gacela_glShadeModel); - scm_c_define_gsubr ("glTranslatef", 3, 0, 0, gacela_glTranslatef); - scm_c_define_gsubr ("glVertex2f", 2, 0, 0, gacela_glVertex2f); - scm_c_define_gsubr ("glVertex3f", 3, 0, 0, gacela_glVertex3f); - scm_c_define_gsubr ("glViewport", 4, 0, 0, gacela_glViewport); - scm_c_define_gsubr ("glGenTextures", 1, 0, 0, gacela_glGenTextures); - scm_c_define_gsubr ("glDeleteTextures", 2, 0, 0, gacela_glDeleteTextures); - scm_c_define_gsubr ("glBindTexture", 2, 0, 0, gacela_glBindTexture); - scm_c_define_gsubr ("glTexImage2D", 9, 0, 0, gacela_glTexImage2D); - scm_c_define_gsubr ("glTexParameteri", 3, 0, 0, gacela_glTexParameteri); - scm_c_define_gsubr ("glTexCoord2f", 2, 0, 0, gacela_glTexCoord2f); - scm_c_define_gsubr ("glLightfv", 3, 0, 0, gacela_glLightfv); - scm_c_define_gsubr ("glNormal3f", 3, 0, 0, gacela_glNormal3f); - scm_c_define_gsubr ("glBlendFunc", 2, 0, 0, gacela_glBlendFunc); - scm_c_define_gsubr ("glOrtho", 6, 0, 0, gacela_glOrtho); - scm_c_define_gsubr ("glPushMatrix", 0, 0, 0, gacela_glPushMatrix); - scm_c_define_gsubr ("glPopMatrix", 0, 0, 0, gacela_glPopMatrix); - - scm_c_define_gsubr ("gluPerspective", 4, 0, 0, gacela_gluPerspective); - scm_c_define_gsubr ("gluBuild2DMipmaps", 7, 0, 0, gacela_gluBuild2DMipmaps); - scm_c_define_gsubr ("gluLookAt", 9, 0, 0, gacela_gluLookAt); - - return NULL; -} diff --git a/src/gacela_GL.h b/src/gacela_GL.h deleted file mode 100644 index 634fc47..0000000 --- a/src/gacela_GL.h +++ /dev/null @@ -1,18 +0,0 @@ -/* Gacela, a GNU Guile extension for fast games development - Copyright (C) 2009 by Javier Sancho Fernandez - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program 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 General Public License - along with this program. If not, see . -*/ - -void* GL_register_functions (void* data); diff --git a/src/gacela_ttf.scm b/src/gacela_ttf.scm deleted file mode 100644 index a9e64c0..0000000 --- a/src/gacela_ttf.scm +++ /dev/null @@ -1,30 +0,0 @@ -;;; Gacela, a GNU Guile extension for fast games development -;;; Copyright (C) 2009 by Javier Sancho Fernandez -;;; -;;; This program is free software: you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation, either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; This program 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 General Public License -;;; along with this program. If not, see . - - -(define* (load-font font-file #:key (size 40) (encoding ft_encoding_unicode)) - (let* ((key (list font-file)) - (font (get-resource-from-cache key))) - (cond ((not font) - (set! font (ftglCreateTextureFont font-file)) - (insert-resource-into-cache key font))) - (ftglSetFontFaceSize font size 72) - (ftglSetFontCharMap font encoding) - font)) - -(define* (render-text text font #:key (size #f)) - (cond (size (ftglSetFontFaceSize font size 72))) - (ftglRenderFont font text FTGL_RENDER_ALL)) diff --git a/src/gl.c b/src/gl.c new file mode 100644 index 0000000..ffdc4e8 --- /dev/null +++ b/src/gl.c @@ -0,0 +1,489 @@ +/* Gacela, a GNU Guile extension for fast games development + Copyright (C) 2009 by Javier Sancho Fernandez + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License + along with this program. If not, see . +*/ + +#include +#include +#include + +struct glTexture +{ + GLuint texture_id; + int width, height; +}; + +static scm_t_bits glTexture_tag; + +SCM +make_glTexture (GLuint texture_id) +{ + SCM smob; + struct glTexture *glTexture; + + glTexture = (struct glTexture *) scm_gc_malloc (sizeof (struct glTexture), "glTexture"); + + glTexture->texture_id = 0; + + SCM_NEWSMOB (smob, glTexture_tag, glTexture); + + glTexture->texture_id = texture_id; + + return smob; +} + +GLuint +get_glTexture_id (SCM glTexture_smob) +{ + struct glTexture *glTexture; + + scm_assert_smob_type (glTexture_tag, glTexture_smob); + glTexture = (struct glTexture *) SCM_SMOB_DATA (glTexture_smob); + return glTexture->texture_id; +} + +SCM +get_glTexture_width (SCM glTexture_smob) +{ + struct glTexture *glTexture; + + scm_assert_smob_type (glTexture_tag, glTexture_smob); + glTexture = (struct glTexture *) SCM_SMOB_DATA (glTexture_smob); + return scm_from_int (glTexture->width); +} + +SCM +get_glTexture_height (SCM glTexture_smob) +{ + struct glTexture *glTexture; + + scm_assert_smob_type (glTexture_tag, glTexture_smob); + glTexture = (struct glTexture *) SCM_SMOB_DATA (glTexture_smob); + return scm_from_int (glTexture->height); +} + +SCM +set_glTexture_size (SCM glTexture_smob, SCM width, SCM height) +{ + struct glTexture *glTexture; + + scm_assert_smob_type (glTexture_tag, glTexture_smob); + glTexture = (struct glTexture *) SCM_SMOB_DATA (glTexture_smob); + glTexture->width = scm_to_int (width); + glTexture->height = scm_to_int (height); + return SCM_UNSPECIFIED; +} + +size_t +free_glTexture (SCM glTexture_smob) +{ + struct glTexture *glTexture = (struct glTexture *) SCM_SMOB_DATA (glTexture_smob); + GLuint text[1]; + + text[0] = glTexture->texture_id; + glDeleteTextures (1, &text[0]); + scm_gc_free (glTexture, sizeof (struct glTexture), "glTexture"); + + return 0; +} + + +SCM +gacela_glBegin (SCM mode) +{ + glBegin (scm_to_int (mode)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glClear (SCM mask) +{ + glClear (scm_to_int (mask)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glClearColor (SCM red, SCM green, SCM blue, SCM alpha) +{ + glClearColor (scm_to_double (red), scm_to_double (green), scm_to_double (blue), scm_to_double (alpha)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glClearDepth (SCM depth) +{ + glClearDepth (scm_to_double (depth)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glColor3f (SCM red, SCM green, SCM blue) +{ + glColor3f (scm_to_double (red), scm_to_double (green), scm_to_double (blue)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glColor4f (SCM red, SCM green, SCM blue, SCM alpha) +{ + glColor4f (scm_to_double (red), scm_to_double (green), scm_to_double (blue), scm_to_double (alpha)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glDepthFunc (SCM func) +{ + glDepthFunc (scm_to_int (func)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glEnable (SCM cap) +{ + glEnable (scm_to_int (cap)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glDisable (SCM cap) +{ + glDisable (scm_to_int (cap)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glEnd (void) +{ + glEnd (); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glHint (SCM target, SCM mode) +{ + glHint (scm_to_int (target), scm_to_int (mode)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glLoadIdentity (void) +{ + glLoadIdentity (); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glMatrixMode (SCM mode) +{ + glMatrixMode (scm_to_int (mode)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glRotatef (SCM angle, SCM x, SCM y, SCM z) +{ + glRotatef (scm_to_double (angle), scm_to_double (x), scm_to_double (y), scm_to_double (z)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glShadeModel (SCM mode) +{ + glShadeModel (scm_to_int (mode)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glTranslatef (SCM x, SCM y, SCM z) +{ + glTranslatef (scm_to_double (x), scm_to_double (y), scm_to_double (z)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glVertex2f (SCM x, SCM y) +{ + glVertex2f (scm_to_double (x), scm_to_double (y)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glVertex3f (SCM x, SCM y, SCM z) +{ + glVertex3f (scm_to_double (x), scm_to_double (y), scm_to_double (z)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glViewport (SCM x, SCM y, SCM width, SCM height) +{ + glViewport (scm_to_int (x), scm_to_int (y), scm_to_int (width), scm_to_int (height)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glGenTextures (SCM n) +{ + SCM textures; + int nint = scm_to_int (n); + GLuint text[nint]; + int i; + + textures = scm_list_n (SCM_UNDEFINED); + glGenTextures (nint, &text[0]); + + for (i = nint - 1; i >= 0; i--) { + textures = scm_cons (make_glTexture (text[i]), textures); + } + + return textures; +} + +SCM +gacela_glDeleteTextures (SCM n, SCM textures) +{ + int nint = scm_to_int (n); + GLuint text[nint]; + int i; + + for (i = 0; i < nint; i++) { + text[i] = scm_to_int (scm_list_ref (textures, scm_from_int (i))); + } + + glDeleteTextures (nint, &text[0]); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glBindTexture (SCM target, SCM texture) +{ + glBindTexture (scm_to_int (target), get_glTexture_id (texture)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glTexImage2D (SCM target, SCM level, SCM internalFormat, SCM width, SCM height, SCM border, SCM format, SCM type, SCM pixels) +{ + glTexImage2D (scm_to_int (target), scm_to_int (level), scm_to_int (internalFormat), scm_to_int (width), \ + scm_to_int (height), scm_to_int (border), scm_to_int (format), scm_to_int (type), \ + (GLvoid *)scm_to_int (pixels)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glTexParameteri (SCM target, SCM pname, SCM param) +{ + glTexParameteri (scm_to_int (target), scm_to_int (pname), scm_to_int (param)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glTexCoord2f (SCM s, SCM t) +{ + glTexCoord2f (scm_to_double (s), scm_to_double (t)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glLightfv (SCM light, SCM pname, SCM params) +{ + int n = scm_to_int (scm_length (params)); + GLfloat gl_params[n]; + int i; + + for (i = 0; i < n; i++) { + gl_params[i] = scm_to_double (scm_list_ref (params, scm_from_int (i))); + } + + glLightfv (scm_to_int (light), scm_to_int (pname), gl_params); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glNormal3f (SCM nx, SCM ny, SCM nz) +{ + glNormal3f (scm_to_double (nx), scm_to_double (ny), scm_to_double (nz)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glBlendFunc (SCM sfactor, SCM dfactor) +{ + glBlendFunc (scm_to_int (sfactor), scm_to_int (dfactor)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glOrtho (SCM left, SCM right, SCM bottom, SCM top, SCM near_val, SCM far_val) +{ + glOrtho (scm_to_double (left), scm_to_double (right), scm_to_double (bottom), scm_to_double (top), \ + scm_to_double (near_val), scm_to_double (far_val)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glPushMatrix (void) +{ + glPushMatrix (); + return SCM_UNSPECIFIED; +} + +SCM +gacela_glPopMatrix (void) +{ + glPopMatrix (); + return SCM_UNSPECIFIED; +} + +SCM +gacela_gluPerspective (SCM fovy, SCM aspect, SCM zNear, SCM zFar) +{ + gluPerspective (scm_to_double (fovy), scm_to_double (aspect), scm_to_double (zNear), scm_to_double (zFar)); + return SCM_UNSPECIFIED; +} + +SCM +gacela_gluBuild2DMipmaps (SCM target, SCM internalFormat, SCM width, SCM height, SCM format, SCM type, SCM data) +{ + return scm_from_int (gluBuild2DMipmaps (scm_to_int (target), scm_to_int (internalFormat), scm_to_int (width), \ + scm_to_int (height), scm_to_int (format), scm_to_int (type), \ + (void *)scm_to_int (data))); +} + +SCM +gacela_gluLookAt (SCM eyeX, SCM eyeY, SCM eyeZ, SCM centerX, SCM centerY, SCM centerZ, SCM upX, SCM upY, SCM upZ) +{ + gluLookAt (scm_to_double (eyeX), scm_to_double (eyeY), scm_to_double (eyeZ), \ + scm_to_double (centerX), scm_to_double (centerY), scm_to_double (centerZ), \ + scm_to_double (upX), scm_to_double (upY), scm_to_double (upZ)); + return SCM_UNSPECIFIED; +} + + +void +init_gacela_gl (void *data) +{ + glTexture_tag = scm_make_smob_type ("glTexture", sizeof (struct glTexture)); + scm_set_smob_free (glTexture_tag, free_glTexture); + scm_c_define_gsubr ("texture-w", 1, 0, 0, get_glTexture_width); + scm_c_define_gsubr ("texture-h", 1, 0, 0, get_glTexture_height); + scm_c_define_gsubr ("set-texture-size!", 3, 0, 0, set_glTexture_size); + + // Data types + scm_c_define ("GL_UNSIGNED_BYTE", scm_from_int (GL_UNSIGNED_BYTE)); + + // Primitives + scm_c_define ("GL_POINTS", scm_from_int (GL_POINTS)); + scm_c_define ("GL_LINES", scm_from_int (GL_LINES)); + scm_c_define ("GL_LINE_LOOP", scm_from_int (GL_LINE_LOOP)); + scm_c_define ("GL_LINE_STRIP", scm_from_int (GL_LINE_STRIP)); + scm_c_define ("GL_TRIANGLES", scm_from_int (GL_TRIANGLES)); + scm_c_define ("GL_TRIANGLE_STRIP", scm_from_int (GL_TRIANGLE_STRIP)); + scm_c_define ("GL_TRIANGLE_FAN", scm_from_int (GL_TRIANGLE_FAN)); + scm_c_define ("GL_QUADS", scm_from_int (GL_QUADS)); + scm_c_define ("GL_QUAD_STRIP", scm_from_int (GL_QUAD_STRIP)); + scm_c_define ("GL_POLYGON", scm_from_int (GL_POLYGON)); + + // Matrix Mode + scm_c_define ("GL_MODELVIEW", scm_from_int (GL_MODELVIEW)); + scm_c_define ("GL_PROJECTION", scm_from_int (GL_PROJECTION)); + + // Depth buffer + scm_c_define ("GL_LEQUAL", scm_from_int (GL_LEQUAL)); + scm_c_define ("GL_DEPTH_TEST", scm_from_int (GL_DEPTH_TEST)); + + // Lighting + scm_c_define ("GL_LIGHTING", scm_from_int (GL_LIGHTING)); + scm_c_define ("GL_LIGHT1", scm_from_int (GL_LIGHT1)); + scm_c_define ("GL_AMBIENT", scm_from_int (GL_AMBIENT)); + scm_c_define ("GL_DIFFUSE", scm_from_int (GL_DIFFUSE)); + scm_c_define ("GL_POSITION", scm_from_int (GL_POSITION)); + scm_c_define ("GL_SMOOTH", scm_from_int (GL_SMOOTH)); + + // Blending + scm_c_define ("GL_BLEND", scm_from_int (GL_BLEND)); + scm_c_define ("GL_ONE", scm_from_int (GL_ONE)); + scm_c_define ("GL_ONE_MINUS_SRC_ALPHA", scm_from_int (GL_ONE_MINUS_SRC_ALPHA)); + scm_c_define ("GL_SRC_ALPHA", scm_from_int (GL_SRC_ALPHA)); + + // Fog + scm_c_define ("GL_LINEAR", scm_from_int (GL_LINEAR)); + + // Buffers, Pixel Drawing/Reading + scm_c_define ("GL_RGB", scm_from_int (GL_RGB)); + scm_c_define ("GL_RGBA", scm_from_int (GL_RGBA)); + + // Hints + scm_c_define ("GL_PERSPECTIVE_CORRECTION_HINT", scm_from_int (GL_PERSPECTIVE_CORRECTION_HINT)); + scm_c_define ("GL_NICEST", scm_from_int (GL_NICEST)); + + // Texture mapping + scm_c_define ("GL_TEXTURE_2D", scm_from_int (GL_TEXTURE_2D)); + scm_c_define ("GL_TEXTURE_MAG_FILTER", scm_from_int (GL_TEXTURE_MAG_FILTER)); + scm_c_define ("GL_TEXTURE_MIN_FILTER", scm_from_int (GL_TEXTURE_MIN_FILTER)); + scm_c_define ("GL_LINEAR_MIPMAP_NEAREST", scm_from_int (GL_LINEAR_MIPMAP_NEAREST)); + scm_c_define ("GL_NEAREST", scm_from_int (GL_NEAREST)); + + // glPush/PopAttrib bits + scm_c_define ("GL_DEPTH_BUFFER_BIT", scm_from_int (GL_DEPTH_BUFFER_BIT)); + scm_c_define ("GL_COLOR_BUFFER_BIT", scm_from_int (GL_COLOR_BUFFER_BIT)); + + // OpenGL 1.2 + scm_c_define ("GL_BGR", scm_from_int (GL_BGR)); + scm_c_define ("GL_BGRA", scm_from_int (GL_BGRA)); + + + scm_c_define_gsubr ("glBegin", 1, 0, 0, gacela_glBegin); + scm_c_define_gsubr ("glClear", 1, 0, 0, gacela_glClear); + scm_c_define_gsubr ("glClearColor", 4, 0, 0, gacela_glClearColor); + scm_c_define_gsubr ("glClearDepth", 1, 0, 0, gacela_glClearDepth); + scm_c_define_gsubr ("glColor3f", 3, 0, 0, gacela_glColor3f); + scm_c_define_gsubr ("glColor4f", 4, 0, 0, gacela_glColor4f); + scm_c_define_gsubr ("glDepthFunc", 1, 0, 0, gacela_glDepthFunc); + scm_c_define_gsubr ("glEnable", 1, 0, 0, gacela_glEnable); + scm_c_define_gsubr ("glDisable", 1, 0, 0, gacela_glDisable); + scm_c_define_gsubr ("glEnd", 0, 0, 0, gacela_glEnd); + scm_c_define_gsubr ("glHint", 2, 0, 0, gacela_glHint); + scm_c_define_gsubr ("glLoadIdentity", 0, 0, 0, gacela_glLoadIdentity); + scm_c_define_gsubr ("glMatrixMode", 1, 0, 0, gacela_glMatrixMode); + scm_c_define_gsubr ("glRotatef", 4, 0, 0, gacela_glRotatef); + scm_c_define_gsubr ("glShadeModel", 1, 0, 0, gacela_glShadeModel); + scm_c_define_gsubr ("glTranslatef", 3, 0, 0, gacela_glTranslatef); + scm_c_define_gsubr ("glVertex2f", 2, 0, 0, gacela_glVertex2f); + scm_c_define_gsubr ("glVertex3f", 3, 0, 0, gacela_glVertex3f); + scm_c_define_gsubr ("glViewport", 4, 0, 0, gacela_glViewport); + scm_c_define_gsubr ("glGenTextures", 1, 0, 0, gacela_glGenTextures); + scm_c_define_gsubr ("glDeleteTextures", 2, 0, 0, gacela_glDeleteTextures); + scm_c_define_gsubr ("glBindTexture", 2, 0, 0, gacela_glBindTexture); + scm_c_define_gsubr ("glTexImage2D", 9, 0, 0, gacela_glTexImage2D); + scm_c_define_gsubr ("glTexParameteri", 3, 0, 0, gacela_glTexParameteri); + scm_c_define_gsubr ("glTexCoord2f", 2, 0, 0, gacela_glTexCoord2f); + scm_c_define_gsubr ("glLightfv", 3, 0, 0, gacela_glLightfv); + scm_c_define_gsubr ("glNormal3f", 3, 0, 0, gacela_glNormal3f); + scm_c_define_gsubr ("glBlendFunc", 2, 0, 0, gacela_glBlendFunc); + scm_c_define_gsubr ("glOrtho", 6, 0, 0, gacela_glOrtho); + scm_c_define_gsubr ("glPushMatrix", 0, 0, 0, gacela_glPushMatrix); + scm_c_define_gsubr ("glPopMatrix", 0, 0, 0, gacela_glPopMatrix); + + scm_c_define_gsubr ("gluPerspective", 4, 0, 0, gacela_gluPerspective); + scm_c_define_gsubr ("gluBuild2DMipmaps", 7, 0, 0, gacela_gluBuild2DMipmaps); + scm_c_define_gsubr ("gluLookAt", 9, 0, 0, gacela_gluLookAt); +} + +void +scm_init_gacela_gl () +{ + init_gacela_gl (NULL); +} diff --git a/src/gl.scm b/src/gl.scm new file mode 100644 index 0000000..0d6541d --- /dev/null +++ b/src/gl.scm @@ -0,0 +1,25 @@ +;;; Gacela, a GNU Guile extension for fast games development +;;; Copyright (C) 2009 by Javier Sancho Fernandez +;;; +;;; This program is free software: you can redistribute it and/or modify +;;; it under the terms of the GNU General Public License as published by +;;; the Free Software Foundation, either version 3 of the License, or +;;; (at your option) any later version. +;;; +;;; This program 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 General Public License +;;; along with this program. If not, see . + + +(define-module (gacela gl)) + +(load-extension "libguile-gacela-gl" "scm_init_gacela_gl") + +(module-map (lambda (sym var) + (if (not (eq? sym '%module-public-interface)) + (module-export! (current-module) (list sym)))) + (current-module)) diff --git a/src/sdl.c b/src/sdl.c index 8b9791a..b46a552 100644 --- a/src/sdl.c +++ b/src/sdl.c @@ -21,7 +21,6 @@ #include #include #include -#include "gacela_SDL.h" struct surface { @@ -531,7 +530,7 @@ init_gacela_sdl (void *data) } void -gacela_sdl_init () +scm_init_gacela_sdl () { - scm_c_define_module ("gacela sdl", init_gacela_sdl, NULL); + init_gacela_sdl (NULL); } diff --git a/src/sdl.scm b/src/sdl.scm index 103c84c..056a1dc 100644 --- a/src/sdl.scm +++ b/src/sdl.scm @@ -1,2 +1,25 @@ +;;; Gacela, a GNU Guile extension for fast games development +;;; Copyright (C) 2009 by Javier Sancho Fernandez +;;; +;;; This program is free software: you can redistribute it and/or modify +;;; it under the terms of the GNU General Public License as published by +;;; the Free Software Foundation, either version 3 of the License, or +;;; (at your option) any later version. +;;; +;;; This program 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 General Public License +;;; along with this program. If not, see . + + (define-module (gacela sdl)) -(load-extension "sdl" "foo_bar_init") \ No newline at end of file + +(load-extension "libguile-gacela-sdl" "scm_init_gacela_sdl") + +(module-map (lambda (sym var) + (if (not (eq? sym '%module-public-interface)) + (module-export! (current-module) (list sym)))) + (current-module)) diff --git a/src/ttf.scm b/src/ttf.scm new file mode 100644 index 0000000..5c02e54 --- /dev/null +++ b/src/ttf.scm @@ -0,0 +1,33 @@ +;;; Gacela, a GNU Guile extension for fast games development +;;; Copyright (C) 2009 by Javier Sancho Fernandez +;;; +;;; This program is free software: you can redistribute it and/or modify +;;; it under the terms of the GNU General Public License as published by +;;; the Free Software Foundation, either version 3 of the License, or +;;; (at your option) any later version. +;;; +;;; This program 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 General Public License +;;; along with this program. If not, see . + + +(define-module (gacela ttf) + #:use-module (gacela ftgl)) + +(define* (load-font font-file #:key (size 40) (encoding ft_encoding_unicode)) + (let* ((key (list font-file)) + (font (get-resource-from-cache key))) + (cond ((not font) + (set! font (ftglCreateTextureFont font-file)) + (insert-resource-into-cache key font))) + (ftglSetFontFaceSize font size 72) + (ftglSetFontCharMap font encoding) + font)) + +(define* (render-text text font #:key (size #f)) + (cond (size (ftglSetFontFaceSize font size 72))) + (ftglRenderFont font text FTGL_RENDER_ALL))