diff -ru OpenGL-0.54_old\Makefile.PL OpenGL-0.54\Makefile.PL --- OpenGL-0.54_old\Makefile.PL Wed Jun 20 10:39:14 2001 +++ OpenGL-0.54\Makefile.PL Mon Mar 29 21:40:12 2004 @@ -5,6 +5,30 @@ # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. +if ($^O eq 'MSWin32') { # for Win32 + +$DEFS = "-DHAVE_GL"; # Primary OpenGL system +$DEFS .= " -DHAVE_GLU"; # GL Utility library +$DEFS .= " -DHAVE_GLUT"; # Simple User interface Toolkit +# $DEFS .= " -DHAVE_GLX"; # Interface to X/Windows for OpenGL -- + # emulated on several non-X systems + # ...but not on Windows! + +WriteMakefile( + 'NAME' => 'OpenGL', + 'VERSION_FROM' => 'OpenGL.pm', + 'DEFINE' => $DEFS, + 'XSPROTOARG' => '-noprototypes', + 'OBJECT' => '$(BASEEXT)$(OBJ_EXT) gl_util$(OBJ_EXT)', + 'LIBS' => ["-lOPENGL32 -lGLU32 -lglut32",], + 'INC' => "", + 'PM' => {'OpenGL.pm' => '$(INST_LIBDIR)/OpenGL.pm'}, + 'dist' => { COMPRESS=>"gzip", SUFFIX=>"gz" } +); +} + +else { + # ExtUtils::Liblist is broken @findlib::ISA = qw(ExtUtils::Liblist); sub findlib::lsdir { shift; grep /$_[0]/, <$_[1]>} @@ -114,3 +138,5 @@ 'INC' => $includes, 'PM' => {'OpenGL.pm' => '$(INST_LIBDIR)/OpenGL.pm'}, ); + +} diff -ru OpenGL-0.54_old\MANIFEST OpenGL-0.54\MANIFEST --- OpenGL-0.54_old\MANIFEST Thu Nov 16 23:47:04 2000 +++ OpenGL-0.54\MANIFEST Fri Apr 02 22:52:36 2004 @@ -7,6 +7,7 @@ OpenGL.xs README README.os2 +README.Win32 SUPPORTS TODO examples/RCS/planets,v @@ -49,3 +50,4 @@ ppport.h test.pl typemap +META.yml Module meta-data (added by MakeMaker) Only in OpenGL-0.54: META.yml diff -ru OpenGL-0.54_old\OpenGL.pm OpenGL-0.54\OpenGL.pm --- OpenGL-0.54_old\OpenGL.pm Wed Jun 20 10:41:56 2001 +++ OpenGL-0.54\OpenGL.pm Fri Apr 02 22:44:26 2004 @@ -3336,7 +3336,7 @@ 'parent'=> 0, 'steal'=> 0, 'mask' => (_have_glx() ? StructureNotifyMask() : 0), - 'attributes'=> [GLX_RGBA()], + # 'attributes'=> [GLX_RGBA()], ); sub glpOpenWindow { diff -ru OpenGL-0.54_old\OpenGL.xs OpenGL-0.54\OpenGL.xs --- OpenGL-0.54_old\OpenGL.xs Wed Nov 29 04:05:46 2000 +++ OpenGL-0.54\OpenGL.xs Fri Apr 23 19:19:08 2004 @@ -49,6 +49,28 @@ */ +#ifdef _WIN32 /* OpenGL 1.2 extensions for Windows */ + +typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +static PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D; + +typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +static PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements; + +typedef void (APIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +static PFNGLTEXIMAGE3DPROC glTexImage3D; + +typedef void (APIENTRY * PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +static PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D; + +typedef void (APIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); +static PFNGLBLENDEQUATIONEXTPROC glBlendEquationEXT; + +typedef void (APIENTRY * PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +static PFNGLBLENDCOLOREXTPROC glBlendColorEXT; + +#endif /* End Windows extensions */ + static int not_here(s) @@ -337,7 +359,6 @@ static void destroy_glut_win_handlers(int win) { SV ** h; - AV * a; if (!glut_handlers) return; @@ -781,7 +802,6 @@ CODE: { oga_struct * oga = malloc(sizeof(oga_struct)); - int i,j; oga->type_count = 1; oga->item_count = length; @@ -1490,6 +1510,14 @@ GLint y GLsizei width GLsizei height + CODE: + { +#ifdef _WIN32 + glCopyTexSubImage3D = (void *) wglGetProcAddress("glCopyTexSubImage3D"); + if (glCopyTexSubImage3D == NULL) croak("glCopyTexSubImage3D is not supported by this renderer"); +#endif + glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); + } #endif @@ -1678,6 +1706,10 @@ CODE: { void * indices_s = EL(indices, gl_type_size(type) * count); +#ifdef _WIN32 + glDrawRangeElements = (void *) wglGetProcAddress("glDrawRangeElements"); + if (glDrawRangeElements == NULL) croak("glDrawRangeElements is not supported by this renderer"); +#endif glDrawRangeElements(mode, start, end, count, type, indices); } @@ -1690,6 +1722,10 @@ GLenum type void * indices CODE: +#ifdef _WIN32 + glDrawRangeElements = (void *) wglGetProcAddress("glDrawRangeElements"); + if (glDrawRangeElements == NULL) croak("glDrawRangeElements is not supported by this renderer"); +#endif glDrawRangeElements(mode, start, end, count, type, indices); #endif @@ -4580,6 +4616,10 @@ CODE: { GLvoid * ptr = ELI(pixels, width, height, format, type, gl_pixelbuffer_unpack); +#ifdef _WIN32 + glTexImage3D = (void *) wglGetProcAddress("glTexImage3D"); + if (glTexImage3D == NULL) croak("glTexImage3D is not supported by this renderer"); +#endif glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, ptr); } @@ -4597,6 +4637,10 @@ GLenum type void * pixels CODE: +#ifdef _WIN32 + glTexImage3D = (void *) wglGetProcAddress("glTexImage3D"); + if (glTexImage3D == NULL) croak("glTexImage3D is not supported by this renderer"); +#endif glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels); # 1.2 @@ -4618,6 +4662,10 @@ glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); ptr = pack_image_ST(&(ST(9)), items-9, width, height, depth, format, type, 0); +#ifdef _WIN32 + glTexImage3D = (void *) wglGetProcAddress("glTexImage3D"); + if (glTexImage3D == NULL) croak("glTexImage3D is not supported by this renderer"); +#endif glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, ptr); glPopClientAttrib(); free(ptr); @@ -4842,6 +4890,10 @@ CODE: { GLvoid * ptr = ELI(pixels, width, height, format, type, gl_pixelbuffer_unpack); +#ifdef _WIN32 + glTexSubImage3D = (void *) wglGetProcAddress("glTexSubImage3D"); + if (glTexSubImage3D == NULL) croak("glTexSubImage3D is not supported by this renderer"); +#endif glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, ptr); } @@ -4860,6 +4912,10 @@ GLenum type void * pixels CODE: +#ifdef _WIN32 + glTexSubImage3D = (void *) wglGetProcAddress("glTexSubImage3D"); + if (glTexSubImage3D == NULL) croak("glTexSubImage3D is not supported by this renderer"); +#endif glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); # 1.1 @@ -4882,6 +4938,10 @@ glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); ptr = pack_image_ST(&(ST(10)), items-10, width, height, depth, format, type, 0); +#ifdef _WIN32 + glTexSubImage3D = (void *) wglGetProcAddress("glTexSubImage3D"); + if (glTexSubImage3D == NULL) croak("glTexSubImage3D is not supported by this renderer"); +#endif glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, ptr); glPopClientAttrib(); free(ptr); @@ -7247,6 +7307,12 @@ void glBlendEquationEXT(mode) GLenum mode + CODE: +#ifdef _WIN32 + glBlendEquationEXT = (void *) wglGetProcAddress("glBlendEquationEXT"); + if (glBlendEquationEXT == NULL) croak("glBlendEquationEXT is not supported by this renderer"); +#endif + glBlendEquationEXT(mode); #endif @@ -7258,6 +7324,12 @@ GLclampf green GLclampf blue GLclampf alpha + CODE: +#ifdef _WIN32 + glBlendColorEXT = (void *) wglGetProcAddress("glBlendColorEXT"); + if (glBlendColorEXT == NULL) croak("glBlendColorEXT is not supported by this renderer"); +#endif + glBlendColorEXT(red, green, blue, alpha); #endif @@ -7432,8 +7504,10 @@ CODE: { GLvoid * ptr = ELI(data, width, 1, format, type, gl_pixelbuffer_unpack); - gluBuild1DMipmaps(target, internalformat, width, format, type, ptr); + RETVAL=gluBuild1DMipmaps(target, internalformat, width, format, type, ptr); } + OUTPUT: + RETVAL GLint gluBuild2DMipmaps_s(target, internalformat, width, height, format, type, data) @@ -7447,8 +7521,10 @@ CODE: { GLvoid * ptr = ELI(data, width, height, format, type, gl_pixelbuffer_unpack); - gluBuild2DMipmaps(target, internalformat, width, height, format, type, ptr); + RETVAL=gluBuild2DMipmaps(target, internalformat, width, height, format, type, ptr); } + OUTPUT: + RETVAL void gluCylinder(quad, base, top, height, slices, stacks) @@ -7523,6 +7599,12 @@ } OUTPUT: RETVAL + +void +gluNurbsProperty(nurb, property, value) + GLUnurbsObj * nurb + GLenum property + GLfloat value #ifdef GLU_VERSION_1_1 @@ -7854,12 +7936,12 @@ case GLU_TESS_BEGIN: case GLU_TESS_BEGIN_DATA: tess->begin_callback = callback; - gluTessCallback(tess->triangulator, which, _s_marshal_glu_t_callback_begin); + gluTessCallback(tess->triangulator, which, (void (CALLBACK*)()) _s_marshal_glu_t_callback_begin); break; case GLU_TESS_END: case GLU_TESS_END_DATA: tess->end_callback = callback; - gluTessCallback(tess->triangulator, which, _s_marshal_glu_t_callback_end); + gluTessCallback(tess->triangulator, which, (void (CALLBACK*)()) _s_marshal_glu_t_callback_end); break; } } Only in OpenGL-0.54: README.Win32 diff -ru OpenGL-0.54_old\typemap OpenGL-0.54\typemap --- OpenGL-0.54_old\typemap Mon Nov 06 05:12:42 2000 +++ OpenGL-0.54\typemap Sat Apr 10 15:47:40 2004 @@ -15,8 +15,8 @@ GLboolean T_BOOL GLenum T_INT GLbitfield T_INT -GLUnurbsObj * T_FASTPTROBJ -GLUquadricObj * T_FASTPTROBJ +GLUnurbsObj * T_PTROBJ +GLUquadricObj * T_PTROBJ PGLUtess * T_FASTPTROBJ