--  Generated from glu.h
--  Date: Wed Sep 22 12:47:09 1999
--
with Interfaces.C.Extensions;
with gl_h;

package glu_h is
   --   $Id: glu_h.ads,v 1.1 1999/09/24 08:37:15 briot Exp $
   --
   --  Mesa 3-D graphics library
   --  Version:  3.0
   --  Copyright (C) 1995-1998  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.
   --

   --
   --  $Log: glu_h.ads,v $
   --  Revision 1.1  1999/09/24 08:37:15  briot
   --  These two files provide a very basic binding to the openGL library (they
   --  were generated from the Mesa files). These are mainly provided as examples,
   --  not as a full binding
   --
   --  Revision 3.2  1998/07/26 01:36:27  brianp
   --  changes for Windows compilation per Ted Jump
   --
   --  Revision 3.1  1998/06/23 00:33:08  brianp
   --  added some WIN32 APIENTRY, CALLBACK stuff (Eric Lassauge)
   --
   --  Revision 3.0  1998/02/20 05:06:01  brianp
   --  initial rev
   --

            --   to facilitate clean DLL building ...
     --  tag specifying we're building for DLL runtime support

   GLU_VERSION_1_1 : constant := 1;
   GLU_TRUE        : constant := 1;
   GLU_FALSE       : constant := 0;

   type GLUenum is new Integer;
   for GLUenum 'Size use 32;

   GLU_SMOOTH : constant GLUenum := 100000;
   GLU_FLAT : constant GLUenum := 100001;
   GLU_NONE : constant GLUenum := 100002;
   GLU_POINT : constant GLUenum := 100010;
   GLU_LINE : constant GLUenum := 100011;
   GLU_FILL : constant GLUenum := 100012;
   GLU_SILHOUETTE : constant GLUenum := 100013;
   GLU_OUTSIDE : constant GLUenum := 100020;
   GLU_INSIDE : constant GLUenum := 100021;
   GLU_BEGIN : constant GLUenum := 100100;
   GLU_VERTEX : constant GLUenum := 100101;
   GLU_END : constant GLUenum := 100102;
   GLU_ERROR : constant GLUenum := 100103;
   GLU_EDGE_FLAG : constant GLUenum := 100104;
   GLU_CW : constant GLUenum := 100120;
   GLU_CCW : constant GLUenum := 100121;
   GLU_INTERIOR : constant GLUenum := 100122;
   GLU_EXTERIOR : constant GLUenum := 100123;
   GLU_UNKNOWN : constant GLUenum := 100124;
   GLU_TESS_ERROR1 : constant GLUenum := 100151;
   GLU_TESS_ERROR2 : constant GLUenum := 100152;
   GLU_TESS_ERROR3 : constant GLUenum := 100153;
   GLU_TESS_ERROR4 : constant GLUenum := 100154;
   GLU_TESS_ERROR5 : constant GLUenum := 100155;
   GLU_TESS_ERROR6 : constant GLUenum := 100156;
   GLU_TESS_ERROR7 : constant GLUenum := 100157;
   GLU_TESS_ERROR8 : constant GLUenum := 100158;
   GLU_TESS_ERROR9 : constant GLUenum := 100159;
   GLU_AUTO_LOAD_MATRIX : constant GLUenum := 100200;
   GLU_CULLING : constant GLUenum := 100201;
   GLU_PARAMETRIC_TOLERANCE : constant GLUenum := 100202;
   GLU_SAMPLING_TOLERANCE : constant GLUenum := 100203;
   GLU_DISPLAY_MODE : constant GLUenum := 100204;
   GLU_SAMPLING_METHOD : constant GLUenum := 100205;
   GLU_U_STEP : constant GLUenum := 100206;
   GLU_V_STEP : constant GLUenum := 100207;
   GLU_PATH_LENGTH : constant GLUenum := 100215;
   GLU_PARAMETRIC_ERROR : constant GLUenum := 100216;
   GLU_DOMAIN_DISTANCE : constant GLUenum := 100217;
   GLU_MAP1_TRIM_2 : constant GLUenum := 100210;
   GLU_MAP1_TRIM_3 : constant GLUenum := 100211;
   GLU_OUTLINE_POLYGON : constant GLUenum := 100240;
   GLU_OUTLINE_PATCH : constant GLUenum := 100241;
   GLU_NURBS_ERROR1 : constant GLUenum := 100251;
   GLU_NURBS_ERROR2 : constant GLUenum := 100252;
   GLU_NURBS_ERROR3 : constant GLUenum := 100253;
   GLU_NURBS_ERROR4 : constant GLUenum := 100254;
   GLU_NURBS_ERROR5 : constant GLUenum := 100255;
   GLU_NURBS_ERROR6 : constant GLUenum := 100256;
   GLU_NURBS_ERROR7 : constant GLUenum := 100257;
   GLU_NURBS_ERROR8 : constant GLUenum := 100258;
   GLU_NURBS_ERROR9 : constant GLUenum := 100259;
   GLU_NURBS_ERROR10 : constant GLUenum := 100260;
   GLU_NURBS_ERROR11 : constant GLUenum := 100261;
   GLU_NURBS_ERROR12 : constant GLUenum := 100262;
   GLU_NURBS_ERROR13 : constant GLUenum := 100263;
   GLU_NURBS_ERROR14 : constant GLUenum := 100264;
   GLU_NURBS_ERROR15 : constant GLUenum := 100265;
   GLU_NURBS_ERROR16 : constant GLUenum := 100266;
   GLU_NURBS_ERROR17 : constant GLUenum := 100267;
   GLU_NURBS_ERROR18 : constant GLUenum := 100268;
   GLU_NURBS_ERROR19 : constant GLUenum := 100269;
   GLU_NURBS_ERROR20 : constant GLUenum := 100270;
   GLU_NURBS_ERROR21 : constant GLUenum := 100271;
   GLU_NURBS_ERROR22 : constant GLUenum := 100272;
   GLU_NURBS_ERROR23 : constant GLUenum := 100273;
   GLU_NURBS_ERROR24 : constant GLUenum := 100274;
   GLU_NURBS_ERROR25 : constant GLUenum := 100275;
   GLU_NURBS_ERROR26 : constant GLUenum := 100276;
   GLU_NURBS_ERROR27 : constant GLUenum := 100277;
   GLU_NURBS_ERROR28 : constant GLUenum := 100278;
   GLU_NURBS_ERROR29 : constant GLUenum := 100279;
   GLU_NURBS_ERROR30 : constant GLUenum := 100280;
   GLU_NURBS_ERROR31 : constant GLUenum := 100281;
   GLU_NURBS_ERROR32 : constant GLUenum := 100282;
   GLU_NURBS_ERROR33 : constant GLUenum := 100283;
   GLU_NURBS_ERROR34 : constant GLUenum := 100284;
   GLU_NURBS_ERROR35 : constant GLUenum := 100285;
   GLU_NURBS_ERROR36 : constant GLUenum := 100286;
   GLU_NURBS_ERROR37 : constant GLUenum := 100287;
   GLU_INVALID_ENUM : constant GLUenum := 100900;
   GLU_INVALID_VALUE : constant GLUenum := 100901;
   GLU_OUT_OF_MEMORY : constant GLUenum := 100902;
   GLU_INCOMPATIBLE_GL_VERSION : constant GLUenum := 100903;
   GLU_VERSION : constant GLUenum := 100800;
   GLU_EXTENSIONS : constant GLUenum := 100801;

            --   Normal vectors
            --   Quadric draw styles
            --   Quadric orientation
            --   Tesselator
            --   Contour types
            --   Tesselation errors
            --   NURBS
            --   Errors
            --   New in GLU 1.1
   --
   --  These are the GLU 1.1 typedefs.  GLU 1.2 has different ones!
   --

   type GLUquadricObj is new Interfaces.C.Extensions.opaque_structure_def;
   type GLUquadricObj_Ptr      is access GLUquadricObj;
   type GLUtriangulatorObj is new     Interfaces.C.Extensions.opaque_structure_def;
   type GLUtriangulatorObj_Ptr is access GLUtriangulatorObj;
   type GLUnurbsObj is new Interfaces.C.Extensions.opaque_structure_def;
   type GLUnurbsObj_Ptr        is access GLUnurbsObj;

   --
   --  Miscellaneous functions
   --

   procedure gluLookAt (eyex    : Gl_H.GLdouble;
                        eyey    : Gl_H.GLdouble;
                        eyez    : Gl_H.GLdouble;
                        centerx : Gl_H.GLdouble;
                        centery : Gl_H.GLdouble;
                        centerz : Gl_H.GLdouble;
                        upx     : Gl_H.GLdouble;
                        upy     : Gl_H.GLdouble;
                        upz     : Gl_H.GLdouble);
   procedure gluOrtho2D (left   : Gl_H.GLdouble;
                         right  : Gl_H.GLdouble;
                         bottom : Gl_H.GLdouble;
                         top    : Gl_H.GLdouble);
   procedure gluPerspective (fovy   : Gl_H.GLdouble;
                             aspect : Gl_H.GLdouble;
                             zNear  : Gl_H.GLdouble;
                             zFar   : Gl_H.GLdouble);
   procedure gluPickMatrix (x        : Gl_H.GLdouble;
                            y        : Gl_H.GLdouble;
                            width    : Gl_H.GLdouble;
                            height   : Gl_H.GLdouble;
                            viewport : Gl_H.GLint_Vec_4);
   function gluProject (objx        : Gl_H.GLdouble;
                        objy        : Gl_H.GLdouble;
                        objz        : Gl_H.GLdouble;
                        modelMatrix : Gl_H.GLdouble_Vec_16;
                        projMatrix  : Gl_H.GLdouble_Vec_16;
                        viewport    : Gl_H.GLint_Vec_4;
                        winx        : access Gl_H.GLdouble;
                        winy        : access Gl_H.GLdouble;
                        winz        : access Gl_H.GLdouble) return Gl_H.GLint;
   function gluUnProject
       (winx        : Gl_H.GLdouble;
        winy        : Gl_H.GLdouble;
        winz        : Gl_H.GLdouble;
        modelMatrix : Gl_H.GLdouble_Vec_16;
        projMatrix  : Gl_H.GLdouble_Vec_16;
        viewport    : Gl_H.GLint_Vec_4;
        objx        : access Gl_H.GLdouble;
        objy        : access Gl_H.GLdouble;
        objz        : access Gl_H.GLdouble) return Gl_H.GLint;
   function gluErrorString (errorCode : Gl_H.GLenum) return Gl_H.GLubyte_Ptr;

   --
   --  Mipmapping and image scaling
   --

   function gluScaleImage
       (format    : Gl_H.GLenum;
        widthin   : Gl_H.GLint;
        heightin  : Gl_H.GLint;
        typein    : Gl_H.GLenum;
        datain    : Interfaces.C.Extensions.Void_Ptr;
        widthout  : Gl_H.GLint;
        heightout : Gl_H.GLint;
        typeout   : Gl_H.GLenum;
        dataout   : Interfaces.C.Extensions.Void_Ptr) return Gl_H.GLint;
   function gluBuild1DMipmaps
       (target     : Gl_H.GLenum;
        components : Gl_H.GLint;
        width      : Gl_H.GLint;
        format     : Gl_H.GLenum;
        type_Id    : Gl_H.GLenum;
        data       : Interfaces.C.Extensions.Void_Ptr) return Gl_H.GLint;
   function gluBuild2DMipmaps
       (target     : Gl_H.GLenum;
        components : Gl_H.GLint;
        width      : Gl_H.GLint;
        height     : Gl_H.GLint;
        format     : Gl_H.GLenum;
        type_Id    : Gl_H.GLenum;
        data       : Interfaces.C.Extensions.Void_Ptr) return Gl_H.GLint;

   --
   --  Quadrics
   --

   function gluNewQuadric return GLUquadricObj_Ptr;
   procedure gluDeleteQuadric (state : access GLUquadricObj);
   procedure gluQuadricDrawStyle (quadObject : access GLUquadricObj;
                                  drawStyle  : Gl_H.GLenum);
   procedure gluQuadricOrientation (quadObject  : access GLUquadricObj;
                                    orientation : Gl_H.GLenum);
   procedure gluQuadricNormals (quadObject : access GLUquadricObj;
                                normals    : Gl_H.GLenum);
   procedure gluQuadricTexture (quadObject    : access GLUquadricObj;
                                textureCoords : Gl_H.GLboolean);

   type glu_h_proc_1 is access procedure;

   procedure gluQuadricCallback (qobj  : access GLUquadricObj;
                                 which : Gl_H.GLenum;
                                 fn    : glu_h_proc_1);
   procedure gluCylinder (qobj       : access GLUquadricObj;
                          baseRadius : Gl_H.GLdouble;
                          topRadius  : Gl_H.GLdouble;
                          height     : Gl_H.GLdouble;
                          slices     : Gl_H.GLint;
                          stacks     : Gl_H.GLint);
   procedure gluSphere (qobj   : access GLUquadricObj;
                        radius : Gl_H.GLdouble;
                        slices : Gl_H.GLint;
                        stacks : Gl_H.GLint);
   procedure gluDisk (qobj        : access GLUquadricObj;
                      innerRadius : Gl_H.GLdouble;
                      outerRadius : Gl_H.GLdouble;
                      slices      : Gl_H.GLint;
                      loops       : Gl_H.GLint);
   procedure gluPartialDisk (qobj        : access GLUquadricObj;
                             innerRadius : Gl_H.GLdouble;
                             outerRadius : Gl_H.GLdouble;
                             slices      : Gl_H.GLint;
                             loops       : Gl_H.GLint;
                             startAngle  : Gl_H.GLdouble;
                             sweepAngle  : Gl_H.GLdouble);

   --
   --  Nurbs
   --

   function gluNewNurbsRenderer return GLUnurbsObj_Ptr;
   procedure gluDeleteNurbsRenderer (nobj : access GLUnurbsObj);
   procedure gluLoadSamplingMatrices (nobj        : access GLUnurbsObj;
                                      modelMatrix : Gl_H.GLfloat_Vec_16;
                                      projMatrix  : Gl_H.GLfloat_Vec_16;
                                      viewport    : Gl_H.GLint_Vec_4);
   procedure gluNurbsProperty (nobj     : access GLUnurbsObj;
                               property : Gl_H.GLenum;
                               value    : Gl_H.GLfloat);
   procedure gluGetNurbsProperty (nobj     : access GLUnurbsObj;
                                  property : Gl_H.GLenum;
                                  value    : access Gl_H.GLfloat);
   procedure gluBeginCurve (nobj : access GLUnurbsObj);
   procedure gluEndCurve (nobj : access GLUnurbsObj);
   procedure gluNurbsCurve (nobj     : access GLUnurbsObj;
                            nknots   : Gl_H.GLint;
                            knot     : access Gl_H.GLfloat;
                            stride   : Gl_H.GLint;
                            ctlarray : access Gl_H.GLfloat;
                            order    : Gl_H.GLint;
                            type_Id  : Gl_H.GLenum);
   procedure gluBeginSurface (nobj : access GLUnurbsObj);
   procedure gluEndSurface (nobj : access GLUnurbsObj);
   procedure gluNurbsSurface (nobj        : access GLUnurbsObj;
                              sknot_count : Gl_H.GLint;
                              sknot       : access Gl_H.GLfloat;
                              tknot_count : Gl_H.GLint;
                              tknot       : access Gl_H.GLfloat;
                              s_stride    : Gl_H.GLint;
                              t_stride    : Gl_H.GLint;
                              ctlarray    : access Gl_H.GLfloat;
                              sorder      : Gl_H.GLint;
                              torder      : Gl_H.GLint;
                              type_Id     : Gl_H.GLenum);
   procedure gluBeginTrim (nobj : access GLUnurbsObj);
   procedure gluEndTrim (nobj : access GLUnurbsObj);
   procedure gluPwlCurve (nobj     : access GLUnurbsObj;
                          count    : Gl_H.GLint;
                          array_Id : access Gl_H.GLfloat;
                          stride   : Gl_H.GLint;
                          type_Id  : Gl_H.GLenum);

   type glu_h_proc_2 is access procedure;

   procedure gluNurbsCallback (nobj  : access GLUnurbsObj;
                               which : Gl_H.GLenum;
                               fn    : glu_h_proc_2);

   --
   --  Polygon tesselation
   --

   function gluNewTess return GLUtriangulatorObj_Ptr;

   type glu_h_proc_3 is access procedure;

   procedure gluTessCallback (tobj  : access GLUtriangulatorObj;
                              which : Gl_H.GLenum;
                              fn    : glu_h_proc_3);
   procedure gluDeleteTess (tobj : access GLUtriangulatorObj);
   procedure gluBeginPolygon (tobj : access GLUtriangulatorObj);
   procedure gluEndPolygon (tobj : access GLUtriangulatorObj);
   procedure gluNextContour (tobj    : access GLUtriangulatorObj;
                             type_Id : Gl_H.GLenum);
   procedure gluTessVertex (tobj : access GLUtriangulatorObj;
                            v    : Gl_H.GLdouble_Vec_3;
                            data : Interfaces.C.Extensions.Void_Ptr);

   --
   --  New functions in GLU 1.1
   --

   function gluGetString (name : Gl_H.GLenum) return Gl_H.GLubyte_Ptr;

private

   pragma Import (C, gluLookAt, "gluLookAt");
   pragma Import (C, gluOrtho2D, "gluOrtho2D");
   pragma Import (C, gluPerspective, "gluPerspective");
   pragma Import (C, gluPickMatrix, "gluPickMatrix");
   pragma Import (C, gluProject, "gluProject");
   pragma Import (C, gluUnProject, "gluUnProject");
   pragma Import (C, gluErrorString, "gluErrorString");
   pragma Import (C, gluScaleImage, "gluScaleImage");
   pragma Import (C, gluBuild1DMipmaps, "gluBuild1DMipmaps");
   pragma Import (C, gluBuild2DMipmaps, "gluBuild2DMipmaps");
   pragma Import (C, gluNewQuadric, "gluNewQuadric");
   pragma Import (C, gluDeleteQuadric, "gluDeleteQuadric");
   pragma Import (C, gluQuadricDrawStyle, "gluQuadricDrawStyle");
   pragma Import (C, gluQuadricOrientation, "gluQuadricOrientation");
   pragma Import (C, gluQuadricNormals, "gluQuadricNormals");
   pragma Import (C, gluQuadricTexture, "gluQuadricTexture");
   pragma Import (C, gluQuadricCallback, "gluQuadricCallback");
   pragma Import (C, gluCylinder, "gluCylinder");
   pragma Import (C, gluSphere, "gluSphere");
   pragma Import (C, gluDisk, "gluDisk");
   pragma Import (C, gluPartialDisk, "gluPartialDisk");
   pragma Import (C, gluNewNurbsRenderer, "gluNewNurbsRenderer");
   pragma Import (C, gluDeleteNurbsRenderer, "gluDeleteNurbsRenderer");
   pragma Import (C, gluLoadSamplingMatrices, "gluLoadSamplingMatrices");
   pragma Import (C, gluNurbsProperty, "gluNurbsProperty");
   pragma Import (C, gluGetNurbsProperty, "gluGetNurbsProperty");
   pragma Import (C, gluBeginCurve, "gluBeginCurve");
   pragma Import (C, gluEndCurve, "gluEndCurve");
   pragma Import (C, gluNurbsCurve, "gluNurbsCurve");
   pragma Import (C, gluBeginSurface, "gluBeginSurface");
   pragma Import (C, gluEndSurface, "gluEndSurface");
   pragma Import (C, gluNurbsSurface, "gluNurbsSurface");
   pragma Import (C, gluBeginTrim, "gluBeginTrim");
   pragma Import (C, gluEndTrim, "gluEndTrim");
   pragma Import (C, gluPwlCurve, "gluPwlCurve");
   pragma Import (C, gluNurbsCallback, "gluNurbsCallback");
   pragma Import (C, gluNewTess, "gluNewTess");
   pragma Import (C, gluTessCallback, "gluTessCallback");
   pragma Import (C, gluDeleteTess, "gluDeleteTess");
   pragma Import (C, gluBeginPolygon, "gluBeginPolygon");
   pragma Import (C, gluEndPolygon, "gluEndPolygon");
   pragma Import (C, gluNextContour, "gluNextContour");
   pragma Import (C, gluTessVertex, "gluTessVertex");
   pragma Import (C, gluGetString, "gluGetString");

end glu_h;

