/*
 * Mesa 3-D graphics library
 * Version:  2.0
 * Copyright (C) 1995-1996  Brian Paul
 *
 * This library is free software you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library if not, write to the Free
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <GL/glu.h>


void APIENTRY smgluLookAt( register __fp0 GLdouble eyex, register __fp1 GLdouble eyey, register __fp2 GLdouble eyez,
		       register __fp3 GLdouble centerx, register __fp4 GLdouble centery, register __fp5 GLdouble centerz,
		       register __fp6 GLdouble upx, register __fp7 GLdouble upy, register __d0 GLdouble upz )
{
	gluLookAt(eyex,eyey,eyez,centerx,centery,centerz,upx,upy,upz);
}

void APIENTRY smgluOrtho2D( register __fp0 GLdouble left, register __fp1 GLdouble right,
			register __fp2 GLdouble bottom, register __fp3 GLdouble top )
{
	gluOrtho2D(left,right,bottom,top);
}

void APIENTRY smgluPerspective( register __fp0 GLdouble fovy, register __fp1 GLdouble aspect,
			    register __fp2 GLdouble zNear, register __fp3 GLdouble zFar )
{
	gluPerspective(fovy,aspect,zNear,zFar);
}

void APIENTRY smgluPickMatrix( register __fp0 GLdouble x, register __fp1 GLdouble y,
			   register __fp2 GLdouble width, register __fp3 GLdouble height,
			   register __a0 const GLint viewport[4] )
{
	gluPickMatrix(x,y,width,height,viewport);
}
GLint APIENTRY smgluProject( register __fp0 GLdouble objx, register __fp1 GLdouble objy, register __fp2 GLdouble objz,
			 register __a0 const GLdouble modelMatrix[16],
			 register __a1 const GLdouble projMatrix[16],
			 register __a2 const GLint viewport[4],
			 register __a3 GLdouble *winx, register __d0 GLdouble *winy, register __d1 GLdouble *winz )
{
	return(gluProject(objx,objy,objz,modelMatrix,projMatrix,viewport,winx,winy,winz));
}
GLint APIENTRY smgluUnProject( register __fp0 GLdouble winx, register __fp1 GLdouble winy, register __fp2 GLdouble winz,
			   register __a0 const GLdouble modelMatrix[16],
			   register __a1 const GLdouble projMatrix[16],
			   register __a2 const GLint viewport[4],
			   register __a3 GLdouble *objx, register __d0 GLdouble *objy, register __d1 GLdouble *objz )
{
	return(gluUnProject(winx,winy,winz,modelMatrix,projMatrix,viewport,objx,objy,objz));
}
const GLubyte* APIENTRY smgluErrorString( register __d0 GLenum errorCode )
{
	return(gluErrorString(errorCode));
}


/*
 *
 * Mipmapping and image scaling
 *
 */

GLint APIENTRY smgluScaleImage( register __d0 GLenum format,
			    register __d1 GLint widthin, register __d2 GLint heightin,
			    register __d3 GLenum typein, register __a0 const void *datain,
			    register __d4 GLint widthout, register __d5 GLint heightout,
			    register __d6 GLenum typeout, register __a1 void *dataout )
{
	return(gluScaleImage(format,widthin,heightin,typein,datain,widthout,heightout,typeout,dataout));
}
GLint APIENTRY smgluBuild1DMipmaps( register __d0 GLenum target, register __d1 GLint components,
				register __d2 GLint width, register __d3 GLenum format,
				register __d4 GLenum type, register __a0 const void *data )
{
	return(gluBuild1DMipmaps(target,components,width,format,type,data));
}
GLint APIENTRY smgluBuild2DMipmaps( register __d0 GLenum target, register __d1 GLint components,
				register __d2 GLint width, register __d3 GLint height, register __d4 GLenum format,
				register __d5 GLenum type, register __a0 const void *data )
{
	return(gluBuild2DMipmaps(target,components,width,height,format,type,data));
}


/*
 *
 * Quadrics
 *
 */

GLUquadricObj* APIENTRY smgluNewQuadric( void )
{
	return(gluNewQuadric());
}

void APIENTRY smgluDeleteQuadric( register __a0 GLUquadricObj *state )
{
	gluDeleteQuadric(state);
}
void APIENTRY smgluQuadricDrawStyle( register __a0 GLUquadricObj *quadObject,
				 register __d0 GLenum drawStyle )
{
	gluQuadricDrawStyle(quadObject,drawStyle);
}
void APIENTRY smgluQuadricOrientation( register __a0 GLUquadricObj *quadObject,
				   register __d0 GLenum orientation )
{
	gluQuadricOrientation(quadObject,orientation);
}
void APIENTRY smgluQuadricNormals( register __a0 GLUquadricObj *quadObject, register __d0 GLenum normals )
{
	gluQuadricNormals(quadObject,normals);
}
void APIENTRY smgluQuadricTexture( register __a0 GLUquadricObj *quadObject,
			       register __d0 GLboolean textureCoords )
{
	gluQuadricTexture(quadObject,textureCoords);
}
void APIENTRY smgluQuadricCallback( register __a0 GLUquadricObj *qobj,
				register __d0 GLenum which, register __a1 void (*fn)() )
{
	gluQuadricCallback(qobj,which,fn);
}
void APIENTRY smgluCylinder( register __a0 GLUquadricObj *qobj,
			 register __fp0 GLdouble baseRadius,
			 register __fp1 GLdouble topRadius,
			 register __fp2 GLdouble height,
			 register __d0 GLint slices, register __d1 GLint stacks )
{
	gluCylinder(qobj,baseRadius,topRadius,height,slices,stacks);
}
void APIENTRY smgluSphere( register __a0 GLUquadricObj *qobj,
		       register __fp0 GLdouble radius, register __d0 GLint slices, register __d1 GLint stacks )
{
	gluSphere(qobj,radius,slices,stacks);
}
void APIENTRY smgluDisk( register __a0 GLUquadricObj *qobj,
		     register __fp0 GLdouble innerRadius, register __fp1 GLdouble outerRadius,
		     register __d0 GLint slices, register __d1 GLint loops )
{
	gluDisk(qobj,innerRadius,outerRadius,slices,loops);
}
void APIENTRY smgluPartialDisk( register __a0 GLUquadricObj *qobj, register __fp0 GLdouble innerRadius,
			    register __fp1 GLdouble outerRadius, register __d0 GLint slices, register __d1 GLint loops,
			    register __fp2 GLdouble startAngle, register __fp3 GLdouble sweepAngle )
{
	gluPartialDisk(qobj,innerRadius,outerRadius,slices,loops,startAngle,sweepAngle);
}


/*
 *
 * Nurbs
 *
 */

GLUnurbsObj* APIENTRY smgluNewNurbsRenderer( void )
{
	return(gluNewNurbsRenderer());
}
void APIENTRY smgluDeleteNurbsRenderer( register __a0 GLUnurbsObj *nobj )
{
	gluDeleteNurbsRenderer(nobj);
}
void APIENTRY smgluLoadSamplingMatrices( register __a0 GLUnurbsObj *nobj,
				     register __a1 const GLfloat modelMatrix[16],
				     register __a2 const GLfloat projMatrix[16],
				     register __a3 const GLint viewport[4] )
{
	gluLoadSamplingMatrices(nobj,modelMatrix,projMatrix,viewport);
}
void APIENTRY smgluNurbsProperty( register __a0 GLUnurbsObj *nobj, register __d0 GLenum property,
			      register __fp0 GLfloat value )
{
	gluNurbsProperty(nobj,property,value);
}
void APIENTRY smgluGetNurbsProperty( register __a0 GLUnurbsObj *nobj, register __d0 GLenum property,
				 register __a1 GLfloat *value )
{
	gluGetNurbsProperty(nobj,property,value);
}
void APIENTRY smgluBeginCurve( register __a0 GLUnurbsObj *nobj )
{
	gluBeginCurve(nobj);
}
void APIENTRY smgluEndCurve( register __a0 GLUnurbsObj * nobj )
{
	gluEndCurve(nobj);
}
void APIENTRY smgluNurbsCurve( register __a0 GLUnurbsObj *nobj, register __d0 GLint nknots, register __a1 GLfloat *knot,
			   register __d1 GLint stride, register __a2 GLfloat *ctlarray, register __d2 GLint order,
			   register __d3 GLenum type )
{
	gluNurbsCurve(nobj,nknots,knot,stride,ctlarray,order,type);
}
void APIENTRY smgluBeginSurface( register __a0 GLUnurbsObj *nobj )
{
	gluBeginSurface(nobj);
}
void APIENTRY smgluEndSurface( register __a0 GLUnurbsObj * nobj )
{
	gluEndSurface(nobj);
}
void APIENTRY smgluNurbsSurface( register __a0 GLUnurbsObj *nobj,
			     register __d0 GLint sknot_count, register __a1 GLfloat *sknot,
			     register __d1 GLint tknot_count, register __a2 GLfloat *tknot,
			     register __d2 GLint s_stride, register __d3 GLint t_stride,
			     register __a3 GLfloat *ctlarray,
			     register __d4 GLint sorder, register __d5 GLint torder,
			     register __d6 GLenum type )
{
	gluNurbsSurface(nobj,sknot_count,sknot,tknot_count,tknot,s_stride,t_stride,ctlarray,sorder,torder,type);
}
void APIENTRY smgluBeginTrim( register __a0 GLUnurbsObj *nobj )
{
	gluBeginTrim(nobj);
}
void APIENTRY smgluEndTrim( register __a0 GLUnurbsObj *nobj )
{
	gluEndTrim(nobj);
}
void APIENTRY smgluPwlCurve( register __a0 GLUnurbsObj *nobj, register __d0 GLint count, register __a1 GLfloat *array,
			 register __d1 GLint stride, register __d2 GLenum type )
{
	gluPwlCurve(nobj,count,array,stride,type);
}
void APIENTRY smgluNurbsCallback( register __a0 GLUnurbsObj *nobj, register __d0 GLenum which, register __a1 void (*fn)() )
{
	gluNurbsCallback(nobj,which,fn);
}


/*
 *
 * Polygon tesselation
 *
 */

GLUtriangulatorObj* APIENTRY smgluNewTess( void )
{
	return(gluNewTess());
}
void APIENTRY smgluTessCallback( register __a0 GLUtriangulatorObj *tobj, register __d0 GLenum which,
			      register __a1 void (*fn)() )
{
	gluTessCallback(tobj,which,fn);
}
void APIENTRY smgluDeleteTess( register __a0 GLUtriangulatorObj *tobj )
{
	gluDeleteTess(tobj);
}
void APIENTRY smgluBeginPolygon( register __a0 GLUtriangulatorObj *tobj )
{
	gluBeginPolygon(tobj);
}
void APIENTRY smgluEndPolygon( register __a0 GLUtriangulatorObj *tobj )
{
	gluEndPolygon(tobj);
}
void APIENTRY smgluNextContour( register __a0 GLUtriangulatorObj *tobj, register __d0 GLenum type )
{
	gluNextContour(tobj,type);
}
void APIENTRY smgluTessVertex( register __a0 GLUtriangulatorObj *tobj, register __a1 GLdouble v[3],
			   register __a2 void *data )
{
	gluTessVertex(tobj,v,data);
}


/*
 *
 * New functions in GLU 1.1
 *
 */

const GLubyte* APIENTRY smgluGetString( register __d0 GLenum name )
{
	return(gluGetString(name));
}


