Acme-MITHALDU-BleedingOpenGL
view release on metacpan or search on metacpan
pogl_glu.xs view on Meta::CPAN
/* Last saved: Wed 17 Dec 2014 03:14:02 PM */
/* Copyright (c) 1998 Kenneth Albanowski. All rights reserved.
* Copyright (c) 2007 Bob Free. All rights reserved.
* Copyright (c) 2009 Chris Marshall. All rights reserved.
* Copyright (c) 2011 Paul Seamons. All rights reserved.
* This program is free software; you can redistribute it and/or
* modify it under the same terms as Perl itself.
*/
/* OpenGL GLU bindings */
#define IN_POGL_GLU_XS
#include <stdio.h>
#include "pgopogl.h"
#ifdef HAVE_GL
#include "gl_util.h"
#endif
#ifdef HAVE_GLX
#include "glx_util.h"
#endif
#ifdef HAVE_GLU
#include "glu_util.h"
#endif
#ifdef IN_POGL_GLU_XS
#ifndef CALLBACK
#define CALLBACK
#endif
struct PGLUtess {
GLUtesselator * triangulator;
#ifdef GLU_VERSION_1_2
SV * begin_callback;
SV * edgeFlag_callback;
SV * vertex_callback;
SV * end_callback;
SV * error_callback;
SV * combine_callback;
#endif
bool do_colors;
bool do_normals;
bool use_vertex_data;
GLdouble * vertex_data; /* used during non-GLU_TESS_VERTEX_DATA */
SV * polygon_data;
AV * vertex_datas;
AV * tess_datas;
};
typedef struct PGLUtess PGLUtess;
#define delete_vertex_datas() \
if (tess->vertex_datas) { \
AV * vds = tess->vertex_datas; \
SV** svp; \
I32 i; \
for (i=0; i<=av_len(vds); i++) { \
svp = av_fetch(vds, i, FALSE); \
free(INT2PTR(GLdouble*, SvIV(*svp))); \
} \
SvREFCNT_dec(tess->vertex_datas); \
tess->vertex_datas = 0; \
}
#define delete_tess_datas() \
( run in 0.892 second using v1.01-cache-2.11-cpan-2398b32b56e )