X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=src%2FOpenGL.xs;h=841d92b6740a30941dd0d89d6a45e0abded4368a;hb=HEAD;hp=4c54228fa2325e8482ffaaa575570790c4af84d5;hpb=bfd90409c307d445ed6fec5cce6344b1e3d1be05;p=sdlgit%2FSDL_perl.git diff --git a/src/OpenGL.xs b/src/OpenGL.xs index 4c54228..841d92b 100644 --- a/src/OpenGL.xs +++ b/src/OpenGL.xs @@ -37,8 +37,27 @@ #include +#ifdef PERL_DARWIN #include #include +#else +#include + +#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 +#undef GL_VERSION_1_3 +#undef GL_VERSION_1_2 +#endif + +#include +#endif + #ifdef USE_THREADS #define HAVE_TLS_CONTEXT @@ -48,7 +67,9 @@ #define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFF #endif /* GL_ALL_CLIENT_BITS */ -#include "../defines.h" +#define GL_HAS_NURBS + +#include "../../src/defines.h" SV* sdl_perl_nurbs_error_hook; void @@ -869,6 +890,8 @@ glDrawElements ( mode, count, type, indices ) CODE: glDrawElements( mode, count, type, indices); +#ifdef GL_VERSION_1_2 + void glDrawRangeElements ( mode, start, end, count, type, indices ) GLenum mode @@ -880,6 +903,8 @@ glDrawRangeElements ( mode, start, end, count, type, indices ) CODE: glDrawRangeElements(mode,start,end,count,type,indices); +#endif // GL_VERSION_1_2 + void glDrawArrays ( mode, first, count ) GLenum mode @@ -935,7 +960,7 @@ glLoadMatrix ( ... ) 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); @@ -945,7 +970,7 @@ glMultMatrix ( ... ) 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); @@ -1029,7 +1054,7 @@ glClipPlane ( plane, ... ) 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); @@ -1068,13 +1093,13 @@ glLight ( light, name, ... ) 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 ) { @@ -1113,13 +1138,13 @@ glMaterial ( face, name, ... ) 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 ) { @@ -2418,8 +2443,10 @@ gluNurbsCallback ( obj, which, cb ) 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); @@ -2454,11 +2481,14 @@ gluNurbsCallback ( obj, which, cb ) 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 @@ -2466,6 +2496,8 @@ gluNurbsCallbackData ( obj, cb ) CODE: gluNurbsCallbackData(obj,(void*)cb); +#endif + void gluBeginSurface ( obj ) GLUnurbsObj *obj @@ -2728,5 +2760,60 @@ gluTessVertex ( tessobj, coords, vd ) #endif +GLUquadric * +gluNewQuadric () + CODE: + RETVAL = gluNewQuadric (); + OUTPUT: + RETVAL + +void +gluDeleteQuadric (quad) + GLUquadric *quad + +void +gluQuadricNormals ( quad, normal ) + GLUquadric *quad + GLenum normal + +void +gluQuadricTexture ( quad, texture ) + GLUquadric *quad + GLboolean texture + +void +gluCylinder ( quad, base, top, height, slices, stacks ) + GLUquadric *quad + GLdouble base + GLdouble top + GLdouble height + GLint slices + GLint stacks + +void +gluDisk ( quad, inner, outer, slices, loops ) + GLUquadric *quad + GLdouble inner + GLdouble outer + GLint slices + GLint loops + +void +gluPartialDisk ( quad, inner, outer, slices, loops, start, sweep ) + GLUquadric *quad + GLdouble inner + GLdouble outer + GLint slices + GLint loops + GLdouble start + GLdouble sweep + +void +gluSphere ( quad, radius, slices, stacks ) + GLUquadric *quad + GLdouble radius + GLint slices + GLint stacks + #endif