#include <glu.h>
#else
#include <GL/gl.h>
+
+#if defined(__WIN32__) && defined(__MINGW32__)
+/*
+this is a sort of dirty hack - MS Windows supports just OpenGL 1.1 and all 1.2+
+related stuff was moved from GL/gl.h to GL/glext.h; however this separation
+was done not properly and even if we are OK with OpenGL 1.1 there are some
+constants missing in GL/gl.h thus we need also GL/glext.h
+*/
+#include <GL/glext.h>
+#undef GL_VERSION_1_3
+#undef GL_VERSION_1_2
+#endif
+
#include <GL/glu.h>
#endif
#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFF
#endif /* GL_ALL_CLIENT_BITS */
-#include "../src/defines.h"
+#define GL_HAS_NURBS
+
+#include "../../src/defines.h"
SV* sdl_perl_nurbs_error_hook;
void
CODE:
glDrawElements( mode, count, type, indices);
+#ifdef GL_VERSION_1_2
+
void
glDrawRangeElements ( mode, start, end, count, type, indices )
GLenum mode
CODE:
glDrawRangeElements(mode,start,end,count,type,indices);
+#endif // GL_VERSION_1_2
+
void
glDrawArrays ( mode, first, count )
GLenum mode
int i;
double mat[16];
for ( i = 0; i < 16; i++ ) {
- mat[i] = (i < items && SvNOK(ST(i)) ? SvNV(ST(i)) : 0.0 );
+ mat[i] = i < items ? SvNV(ST(i)) : 0.0;
}
glLoadMatrixd(mat);
int i;
double mat[16];
for ( i = 0; i < 16; i++ ) {
- mat[i] = (i < items && SvNOK(ST(i)) ? SvNV(ST(i)) : 0.0 );
+ mat[i] = i < items ? SvNV(ST(i)) : 0.0;
}
glMultMatrixd(mat);
double v[4];
int i;
for (i = 0; i < 4; i++ ) {
- v[i] = (i+1 < items && SvNOK(ST(i+1))) ? SvNV(ST(i+1)) : 0.0;
+ v[i] = i+1 < items ? SvNV(ST(i+1)) : 0.0;
}
glClipPlane(plane,v);
if ( items == 6 ) {
float v[4];
for ( i = 0; i < 4; i++ ) {
- v[i] = (SvNOK(ST(i+2))) ? SvNV(ST(i+2)) : 0.0;
+ v[i] = SvNV(ST(i+2));
}
glLightfv(light,name,v);
} else if ( items == 5 ) {
float v[3];
for ( i = 0; i < 3; i++ ) {
- v[i] = (SvNOK(ST(i+2))) ? SvNV(ST(i+2)) : 0.0;
+ v[i] = SvNV(ST(i+2));
}
glLightfv(light,name,v);
} else if ( items == 3 ) {
if ( items == 6 ) {
float v[4];
for ( i = 0; i < 4; i++ ) {
- v[i] = (SvNOK(ST(i+2))) ? SvNV(ST(i+2)) : 0.0;
+ v[i] = SvNV(ST(i+2));
}
glMaterialfv(face,name,v);
} else if ( items == 5 ) {
float v[3];
- for ( i = 0; i < 4; i++ ) {
- v[i] = (SvNOK(ST(i+2))) ? SvNV(ST(i+2)) : 0.0;
+ for ( i = 0; i < 3; i++ ) {
+ v[i] = SvNV(ST(i+2));
}
glMaterialfv(face,name,v);
} else if ( items == 3 ) {
gluNurbsCallback(obj,GLU_ERROR,(GLvoid*)sdl_perl_nurbs_error_callback);
break;
#ifdef GLU_NURBS_BEGIN
+#ifdef GLU_VERSION_1_3
case GLU_NURBS_BEGIN:
case GLU_NURBS_BEGIN_DATA:
+
gluNurbsCallbackData(obj,(void*)cb);
gluNurbsCallback(obj,GLU_NURBS_BEGIN_DATA,
(GLvoid*)sdl_perl_nurbs_being_callback);
gluNurbsCallback(obj,GLU_NURBS_END_DATA,
(GLvoid*)sdl_perl_nurbs_end_callback);
break;
-#endif
+#endif // GLU_VERSION_1_3
+#endif // GLU_NURBS_BEGIN
default:
Perl_croak(aTHX_ "SDL::OpenGL::NurbsCallback - invalid type");
}
+#ifdef GLU_VERSION_1_3
+
void
gluNurbsCallbackData ( obj, cb )
GLUnurbsObj *obj
CODE:
gluNurbsCallbackData(obj,(void*)cb);
+#endif
+
void
gluBeginSurface ( obj )
GLUnurbsObj *obj