struct glTexture
{
GLuint texture_id;
+ int width, height;
};
static scm_t_bits glTexture_tag;
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)
{
glGenTextures (nint, &text[0]);
for (i = nint - 1; i >= 0; i--) {
- textures = scm_cons (scm_from_int (text[i]), textures);
+ textures = scm_cons (make_glTexture (text[i]), textures);
}
return textures;
SCM
gacela_glBindTexture (SCM target, SCM texture)
{
- glBindTexture (scm_to_int (target), scm_to_int (texture));
+ glBindTexture (scm_to_int (target), get_glTexture_id (texture));
return SCM_UNSPECIFIED;
}
{
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));
// 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