with GL;
package GLU is
VERSION_1_1 : constant := 1;
GL_FALSE : constant := GL.GL_False;
GL_TRUE : constant := GL.GL_True;
type Viewport_Rec is record
X, Y : aliased GL.Int;
Width, Height : aliased GL.Int;
end record;
type Matrix_Float is array (0 .. 3, 0 .. 3) of aliased GL.C_Float;
type Matrix_Double is array (0 .. 3, 0 .. 3) of aliased GL.Double;
type Viewport_Ptr is access all Viewport_Rec;
type Matrix_Float_Ptr is access all Matrix_Float;
type Matrix_Double_Ptr is access all Matrix_Double;
type GLUquadricObj is private;
type GLUtriangulatorObj is private;
type GLUnurbsObj is private;
type GLUquadricObjPtr is access all GLUquadricObj;
type GLUtriangulatorObjPtr is access all GLUtriangulatorObj;
type GLUnurbsObjPtr is access all GLUnurbsObj;
type ErrorEnm is
(
GL_NO_ERROR,
GL_INVALID_ENUM,
GL_INVALID_VALUE,
GL_INVALID_OPERATION,
GL_STACK_OVERFLOW,
GL_STACK_UNDERFLOW,
GL_OUT_OF_MEMORY,
GLU_INVALID_ENUM,
GLU_INVALID_VALUE,
GLU_OUT_OF_MEMORY,
GLU_INCOMPATIBLE_GL_VERSION
);
for ErrorEnm use
(
GL_NO_ERROR => 16#0000#,
GL_INVALID_ENUM => 16#0500#,
GL_INVALID_VALUE => 16#0501#,
GL_INVALID_OPERATION => 16#0502#,
GL_STACK_OVERFLOW => 16#0503#,
GL_STACK_UNDERFLOW => 16#0504#,
GL_OUT_OF_MEMORY => 16#0505#,
GLU_INVALID_ENUM => 16#18A24#,
GLU_INVALID_VALUE => 16#18A25#,
GLU_OUT_OF_MEMORY => 16#18A26#,
GLU_INCOMPATIBLE_GL_VERSION => 16#18A27#
);
for ErrorEnm'Size use GL.enum'Size;
function ErrorString (errorCode : ErrorEnm)
return GL.ubytePtr;
function Error_String (errorCode : GL.ErrorEnm)
return GL.ubytePtr;
function ScaleImage (format : GL.PixelFormatEnm;
widthin : GL.Int;
heightin : GL.Int;
typein : GL.PixelDataTypeEnm;
datain : GL.pointer;
widthout : GL.Int;
heightout : GL.Int;
typeout : GL.PixelDataTypeEnm;
dataout : GL.pointer)
return GL.Int;
function Build1DMipmaps (target : GL.TargetTex1DOnlyEnm;
components : GL.Int;
width : GL.Int;
format : GL.TexPixelFormatEnm;
c_type : GL.PixelDataTypeEnm;
data : GL.pointer)
return GL.Int;
function Build2DMipmaps (target : GL.TargetTex2DOnlyEnm;
components : GL.Int;
width : GL.Int;
height : GL.Int;
format : GL.TexPixelFormatEnm;
c_type : GL.PixelDataTypeEnm;
data : GL.pointer)
return GL.Int;
type DrawStyleEnm is
(
GLU_POINT,
GLU_LINE,
GLU_FILL,
GLU_SILHOUETTE
);
for DrawStyleEnm use
(
GLU_POINT => 16#186AA#,
GLU_LINE => 16#186AB#,
GLU_FILL => 16#186AC#,
GLU_SILHOUETTE => 16#186AD#
);
for DrawStyleEnm'Size use GL.enum'Size;
type OrientationEnm is
(
GLU_OUTSIDE,
GLU_INSIDE
);
for OrientationEnm use
(
GLU_OUTSIDE => 16#186B4#,
GLU_INSIDE => 16#186B5#
);
for OrientationEnm'Size use GL.enum'Size;
type NormalsEnm is
(
GLU_SMOOTH,
GLU_FLAT,
GLU_NONE
);
for NormalsEnm use
(
GLU_SMOOTH => 16#186A0#,
GLU_FLAT => 16#186A1#,
GLU_NONE => 16#186A2#
);
for NormalsEnm'Size use GL.enum'Size;
type CallbackEnm is
(
GLU_ERROR
);
for CallbackEnm use
(
GLU_ERROR => 16#18707#
);
for CallbackEnm'Size use GL.enum'Size;
type QuadricCallbackFunction is access procedure (Error : ErrorEnm);
function NewQuadric
return GLUquadricObjPtr;
procedure DeleteQuadric (state : GLUquadricObjPtr);
procedure QuadricDrawStyle (quadObject : GLUquadricObjPtr;
drawStyle : DrawStyleEnm);
procedure QuadricOrientation (quadObject : GLUquadricObjPtr;
orientation : OrientationEnm);
procedure QuadricNormals (quadObject : GLUquadricObjPtr;
normals : NormalsEnm);
procedure QuadricTexture (quadObject : GLUquadricObjPtr;
textureCoords : GL.GL_Boolean);
procedure QuadricCallback (qobj : GLUquadricObjPtr;
which : CallbackEnm;
fn : QuadricCallbackFunction);
procedure Cylinder (qobj : GLUquadricObjPtr;
baseRadius : GL.Double;
topRadius : GL.Double;
height : GL.Double;
slices : GL.Int;
stacks : GL.Int);
procedure Sphere (qobj : GLUquadricObjPtr;
radius : GL.Double;
slices : GL.Int;
stacks : GL.Int);
procedure Disk (qobj : GLUquadricObjPtr;
innerRadius : GL.Double;
outerRadius : GL.Double;
slices : GL.Int;
loops : GL.Int);
procedure PartialDisk (qobj : GLUquadricObjPtr;
innerRadius : GL.Double;
outerRadius : GL.Double;
slices : GL.Int;
loops : GL.Int;
startAngle : GL.Double;
sweepAngle : GL.Double);
type NurbsPropertyEnm is
(
GLU_AUTO_LOAD_MATRIX,
GLU_CULLING,
GLU_PARAMETRIC_TOLERANCE,
GLU_SAMPLING_TOLERANCE,
GLU_DISPLAY_MODE,
GLU_SAMPLING_METHOD,
GLU_U_STEP,
GLU_V_STEP
);
for NurbsPropertyEnm use
(
GLU_AUTO_LOAD_MATRIX => 16#18768#,
GLU_CULLING => 16#18769#,
GLU_PARAMETRIC_TOLERANCE => 16#1876A#,
GLU_SAMPLING_TOLERANCE => 16#1876B#,
GLU_DISPLAY_MODE => 16#1876C#,
GLU_SAMPLING_METHOD => 16#1876D#,
GLU_U_STEP => 16#1876E#,
GLU_V_STEP => 16#1876F#
);
for NurbsPropertyEnm'Size use GL.enum'Size;
type NurbsDisplayModeEnm is
(
GLU_FILL,
GLU_OUTLINE_POLYGON,
GLU_OUTLINE_PATCH
);
for NurbsDisplayModeEnm use
(
GLU_FILL => 16#186AC#,
GLU_OUTLINE_POLYGON => 16#18790#,
GLU_OUTLINE_PATCH => 16#18791#
);
for NurbsDisplayModeEnm'Size use GL.enum'Size;
GLU_PATH_LENGTH : constant := 16#18777#;
GLU_PARAMETRIC_ERROR : constant := 16#18778#;
GLU_DOMAIN_DISTANCE : constant := 16#18779#;
type NurbsErrorEnm is
(
GLU_NURBS_ERROR1,
GLU_NURBS_ERROR2,
GLU_NURBS_ERROR3,
GLU_NURBS_ERROR4,
GLU_NURBS_ERROR5,
GLU_NURBS_ERROR6,
GLU_NURBS_ERROR7,
GLU_NURBS_ERROR8,
GLU_NURBS_ERROR9,
GLU_NURBS_ERROR10,
GLU_NURBS_ERROR11,
GLU_NURBS_ERROR12,
GLU_NURBS_ERROR13,
GLU_NURBS_ERROR14,
GLU_NURBS_ERROR15,
GLU_NURBS_ERROR16,
GLU_NURBS_ERROR17,
GLU_NURBS_ERROR18,
GLU_NURBS_ERROR19,
GLU_NURBS_ERROR20,
GLU_NURBS_ERROR21,
GLU_NURBS_ERROR22,
GLU_NURBS_ERROR23,
GLU_NURBS_ERROR24,
GLU_NURBS_ERROR25,
GLU_NURBS_ERROR26,
GLU_NURBS_ERROR27,
GLU_NURBS_ERROR28,
GLU_NURBS_ERROR29,
GLU_NURBS_ERROR30,
GLU_NURBS_ERROR31,
GLU_NURBS_ERROR32,
GLU_NURBS_ERROR33,
GLU_NURBS_ERROR34,
GLU_NURBS_ERROR35,
GLU_NURBS_ERROR36,
GLU_NURBS_ERROR37
);
for NurbsErrorEnm use
(
GLU_NURBS_ERROR1 => 16#1879B#,
GLU_NURBS_ERROR2 => 16#1879C#,
GLU_NURBS_ERROR3 => 16#1879D#,
GLU_NURBS_ERROR4 => 16#1879E#,
GLU_NURBS_ERROR5 => 16#1879F#,
GLU_NURBS_ERROR6 => 16#187A0#,
GLU_NURBS_ERROR7 => 16#187A1#,
GLU_NURBS_ERROR8 => 16#187A2#,
GLU_NURBS_ERROR9 => 16#187A3#,
GLU_NURBS_ERROR10 => 16#187A4#,
GLU_NURBS_ERROR11 => 16#187A5#,
GLU_NURBS_ERROR12 => 16#187A6#,
GLU_NURBS_ERROR13 => 16#187A7#,
GLU_NURBS_ERROR14 => 16#187A8#,
GLU_NURBS_ERROR15 => 16#187A9#,
GLU_NURBS_ERROR16 => 16#187AA#,
GLU_NURBS_ERROR17 => 16#187AB#,
GLU_NURBS_ERROR18 => 16#187AC#,
GLU_NURBS_ERROR19 => 16#187AD#,
GLU_NURBS_ERROR20 => 16#187AE#,
GLU_NURBS_ERROR21 => 16#187AF#,
GLU_NURBS_ERROR22 => 16#187B0#,
GLU_NURBS_ERROR23 => 16#187B1#,
GLU_NURBS_ERROR24 => 16#187B2#,
GLU_NURBS_ERROR25 => 16#187B3#,
GLU_NURBS_ERROR26 => 16#187B4#,
GLU_NURBS_ERROR27 => 16#187B5#,
GLU_NURBS_ERROR28 => 16#187B6#,
GLU_NURBS_ERROR29 => 16#187B7#,
GLU_NURBS_ERROR30 => 16#187B8#,
GLU_NURBS_ERROR31 => 16#187B9#,
GLU_NURBS_ERROR32 => 16#187BA#,
GLU_NURBS_ERROR33 => 16#187BB#,
GLU_NURBS_ERROR34 => 16#187BC#,
GLU_NURBS_ERROR35 => 16#187BD#,
GLU_NURBS_ERROR36 => 16#187BE#,
GLU_NURBS_ERROR37 => 16#187BF#
);
for NurbsErrorEnm'Size use GL.enum'Size;
type PwlCurveTypeEnm is
(
GLU_MAP1_TRIM_2,
GLU_MAP1_TRIM_3
);
for PwlCurveTypeEnm use
(
GLU_MAP1_TRIM_2 => 16#18772#,
GLU_MAP1_TRIM_3 => 16#18773#
);
for PwlCurveTypeEnm'Size use GL.enum'Size;
type NurbsCallbackFunction is access procedure (Error : NurbsErrorEnm);
function NewNurbsRenderer
return GLUnurbsObjPtr;
procedure DeleteNurbsRenderer (nobj : GLUnurbsObjPtr);
procedure LoadSamplingMatrices (nobj : GLUnurbsObjPtr;
modelMatrix : Matrix_Float_Ptr;
projMatrix : Matrix_Float_Ptr;
viewport : Viewport_Ptr);
procedure NurbsProperty (nobj : GLUnurbsObjPtr;
property : NurbsPropertyEnm;
value : GL.C_Float);
procedure GetNurbsProperty (nobj : GLUnurbsObjPtr;
property : NurbsPropertyEnm;
value : GL.floatPtr);
procedure BeginCurve (nobj : GLUnurbsObjPtr);
procedure EndCurve (nobj : GLUnurbsObjPtr);
procedure NurbsCurve (nobj : GLUnurbsObjPtr;
nknots : GL.Int;
knot : GL.floatPtr;
stride : GL.Int;
ctlarray : GL.floatPtr;
order : GL.Int;
c_type : GL.Map1TargetEnm);
procedure BeginSurface (nobj : GLUnurbsObjPtr);
procedure EndSurface (nobj : GLUnurbsObjPtr);
procedure NurbsSurface (nobj : GLUnurbsObjPtr;
sknot_count : GL.Int;
sknot : GL.floatPtr;
tknot_count : GL.Int;
tknot : GL.floatPtr;
s_stride : GL.Int;
t_stride : GL.Int;
ctlarray : GL.floatPtr;
sorder : GL.Int;
torder : GL.Int;
c_type : GL.Map2TargetEnm);
procedure BeginTrim (nobj : GLUnurbsObjPtr);
procedure EndTrim (nobj : GLUnurbsObjPtr);
procedure PwlCurve (nobj : GLUnurbsObjPtr;
count : GL.Int;
c_array : GL.floatPtr;
stride : GL.Int;
c_type : PwlCurveTypeEnm);
procedure NurbsCallback (nobj : GLUnurbsObjPtr;
which : CallbackEnm;
fn : NurbsCallbackFunction);
type TessCallbackEnm is
(
GLU_BEGIN,
GLU_VERTEX,
GLU_END,
GLU_ERROR,
GLU_EDGE_FLAG
);
for TessCallbackEnm use
(
GLU_BEGIN => 16#18704#,
GLU_VERTEX => 16#18705#,
GLU_END => 16#18706#,
GLU_ERROR => 16#18707#,
GLU_EDGE_FLAG => 16#18708#
);
for TessCallbackEnm'Size use GL.enum'Size;
type TessBeginEnm is
(
GL_LINE_LOOP,
GL_TRIANGLES,
GL_TRIANGLE_STRIP,
GL_TRIANGLE_FAN
);
for TessBeginEnm use
(
GL_LINE_LOOP => 16#0002#,
GL_TRIANGLES => 16#0004#,
GL_TRIANGLE_STRIP => 16#0005#,
GL_TRIANGLE_FAN => 16#0006#
);
for TessBeginEnm'Size use GL.enum'Size;
type TessBeginCallbackFunction is access procedure (ObjType : TessBeginEnm);
type TessVertexCallbackFunction is access procedure (VertexData : GL.pointer);
type TessEndCallbackFunction is access procedure;
type TessErrorEnm is
(
GLU_TESS_ERROR1,
GLU_TESS_ERROR2,
GLU_TESS_ERROR3,
GLU_TESS_ERROR4,
GLU_TESS_ERROR5,
GLU_TESS_ERROR6,
GLU_TESS_ERROR7,
GLU_TESS_ERROR8,
GLU_TESS_ERROR9
);
for TessErrorEnm use
(
GLU_TESS_ERROR1 => 16#18737#,
GLU_TESS_ERROR2 => 16#18738#,
GLU_TESS_ERROR3 => 16#18739#,
GLU_TESS_ERROR4 => 16#1873A#,
GLU_TESS_ERROR5 => 16#1873B#,
GLU_TESS_ERROR6 => 16#1873C#,
GLU_TESS_ERROR7 => 16#1873D#,
GLU_TESS_ERROR8 => 16#1873E#,
GLU_TESS_ERROR9 => 16#1873F#
);
for TessErrorEnm'Size use GL.enum'Size;
type TessErrorCallbackFunction is access procedure (Error : TessErrorEnm);
type TessEdgeFlagCallbackFunction is access procedure (Flag : GL.GL_Boolean);
type ContourTypeEnm is
(
GLU_CW,
GLU_CCW,
GLU_INTERIOR,
GLU_EXTERIOR,
GLU_UNKNOWN
);
for ContourTypeEnm use
(
GLU_CW => 16#18718#,
GLU_CCW => 16#18719#,
GLU_INTERIOR => 16#1871A#,
GLU_EXTERIOR => 16#1871B#,
GLU_UNKNOWN => 16#1871C#
);
for ContourTypeEnm'Size use GL.enum'Size;
function NewTess
return GLUtriangulatorObjPtr;
procedure TessCallback (tobj : GLUtriangulatorObjPtr;
which : TessCallbackEnm;
fn : TessBeginCallbackFunction);
procedure TessCallback (tobj : GLUtriangulatorObjPtr;
which : TessCallbackEnm;
fn : TessVertexCallbackFunction);
procedure TessCallback (tobj : GLUtriangulatorObjPtr;
which : TessCallbackEnm;
fn : TessEndCallbackFunction);
procedure TessCallback (tobj : GLUtriangulatorObjPtr;
which : TessCallbackEnm;
fn : TessErrorCallbackFunction);
procedure TessCallback (tobj : GLUtriangulatorObjPtr;
which : TessCallbackEnm;
fn : TessEdgeFlagCallbackFunction);
procedure DeleteTess (tobj : GLUtriangulatorObjPtr);
procedure BeginPolygon (tobj : GLUtriangulatorObjPtr);
procedure EndPolygon (tobj : GLUtriangulatorObjPtr);
procedure NextContour (tobj : GLUtriangulatorObjPtr;
c_type : ContourTypeEnm);
procedure TessVertex (tobj : GLUtriangulatorObjPtr;
v : GL.doublePtr;
data : GL.pointer);
type StringEnm is
(
GLU_VERSION,
GLU_EXTENSIONS
);
for StringEnm use
(
GLU_VERSION => 16#189C0#,
GLU_EXTENSIONS => 16#189C1#
);
for StringEnm'Size use GL.enum'Size;
function GetString (name : StringEnm)
return GL.ubytePtr;
procedure LookAt (eyex : GL.Double;
eyey : GL.Double;
eyez : GL.Double;
centerx : GL.Double;
centery : GL.Double;
centerz : GL.Double;
upx : GL.Double;
upy : GL.Double;
upz : GL.Double);
procedure Ortho2D (left : GL.Double;
right : GL.Double;
bottom : GL.Double;
top : GL.Double);
procedure Perspective (fovy : GL.Double;
aspect : GL.Double;
zNear : GL.Double;
zFar : GL.Double);
procedure PickMatrix (x : GL.Double;
y : GL.Double;
width : GL.Double;
height : GL.Double;
viewport : Viewport_Ptr);
function Project (objx : GL.Double;
objy : GL.Double;
objz : GL.Double;
modelMatrix : Matrix_Double_Ptr;
projMatrix : Matrix_Double_Ptr;
viewport : Viewport_Ptr;
winx : GL.doublePtr;
winy : GL.doublePtr;
winz : GL.doublePtr)
return GL.Int;
pragma Import (Stdcall, Project, "gluProject");
procedure Project (objx : GL.Double;
objy : GL.Double;
objz : GL.Double;
modelMatrix : Matrix_Double;
projMatrix : Matrix_Double;
viewport : Viewport_Rec;
winx : out GL.Double;
winy : out GL.Double;
winz : out GL.Double;
result : out Boolean);
function UnProject (winx : GL.Double;
winy : GL.Double;
winz : GL.Double;
modelMatrix : Matrix_Double_Ptr;
projMatrix : Matrix_Double_Ptr;
viewport : Viewport_Ptr;
objx : GL.doublePtr;
objy : GL.doublePtr;
objz : GL.doublePtr)
return GL.Int;
procedure Get (pname : GL.ParameterNameEnm;
params : Matrix_Double_Ptr);
procedure Get (pname : GL.ParameterNameEnm;
params : out Matrix_Double);
procedure Get (pname : GL.ParameterNameEnm;
params : Viewport_Ptr);
procedure Get (params : out Viewport_Rec);
private
type GLUquadricObj is record null; end record;
type GLUtriangulatorObj is record null; end record;
type GLUnurbsObj is record null; end record;
pragma Import (Stdcall, LookAt, "gluLookAt");
pragma Import (Stdcall, Ortho2D, "gluOrtho2D");
pragma Import (Stdcall, Perspective, "gluPerspective");
pragma Import (Stdcall, PickMatrix, "gluPickMatrix");
pragma Import (Stdcall, UnProject, "gluUnProject");
function ErrorString_1 (errorCode : ErrorEnm) return GL.ubytePtr;
function ErrorString (errorCode : ErrorEnm) return GL.ubytePtr renames ErrorString_1;
pragma Import (Stdcall, ErrorString_1, "gluErrorString");
function ErrorString_2 (errorCode : GL.ErrorEnm) return GL.ubytePtr;
function Error_String (errorCode : GL.ErrorEnm) return GL.ubytePtr renames ErrorString_2;
pragma Import (Stdcall, ErrorString_2, "gluErrorString");
pragma Import (Stdcall, ScaleImage, "gluScaleImage");
pragma Import (Stdcall, Build1DMipmaps, "gluBuild1DMipmaps");
pragma Import (Stdcall, Build2DMipmaps, "gluBuild2DMipmaps");
pragma Import (Stdcall, NewQuadric, "gluNewQuadric");
pragma Import (Stdcall, DeleteQuadric, "gluDeleteQuadric");
pragma Import (Stdcall, QuadricDrawStyle, "gluQuadricDrawStyle");
pragma Import (Stdcall, QuadricOrientation, "gluQuadricOrientation");
pragma Import (Stdcall, QuadricNormals, "gluQuadricNormals");
pragma Import (Stdcall, QuadricTexture, "gluQuadricTexture");
pragma Import (Stdcall, QuadricCallback, "gluQuadricCallback");
pragma Import (Stdcall, Cylinder, "gluCylinder");
pragma Import (Stdcall, Sphere, "gluSphere");
pragma Import (Stdcall, Disk, "gluDisk");
pragma Import (Stdcall, PartialDisk, "gluPartialDisk");
pragma Import (Stdcall, NewNurbsRenderer, "gluNewNurbsRenderer");
pragma Import (Stdcall, DeleteNurbsRenderer, "gluDeleteNurbsRenderer");
pragma Import (Stdcall, LoadSamplingMatrices, "gluLoadSamplingMatrices");
pragma Import (Stdcall, NurbsProperty, "gluNurbsProperty");
pragma Import (Stdcall, GetNurbsProperty, "gluGetNurbsProperty");
pragma Import (Stdcall, BeginCurve, "gluBeginCurve");
pragma Import (Stdcall, EndCurve, "gluEndCurve");
pragma Import (Stdcall, NurbsCurve, "gluNurbsCurve");
pragma Import (Stdcall, BeginSurface, "gluBeginSurface");
pragma Import (Stdcall, EndSurface, "gluEndSurface");
pragma Import (Stdcall, NurbsSurface, "gluNurbsSurface");
pragma Import (Stdcall, BeginTrim, "gluBeginTrim");
pragma Import (Stdcall, EndTrim, "gluEndTrim");
pragma Import (Stdcall, PwlCurve, "gluPwlCurve");
pragma Import (Stdcall, NurbsCallback, "gluNurbsCallback");
pragma Import (Stdcall, NewTess, "gluNewTess");
pragma Import (Stdcall, TessCallback, "gluTessCallback");
pragma Import (Stdcall, DeleteTess, "gluDeleteTess");
pragma Import (Stdcall, BeginPolygon, "gluBeginPolygon");
pragma Import (Stdcall, EndPolygon, "gluEndPolygon");
pragma Import (Stdcall, NextContour, "gluNextContour");
pragma Import (Stdcall, TessVertex, "gluTessVertex");
pragma Import (Stdcall, GetString, "gluGetString");
procedure GetDoublev (pname : GL.ParameterNameEnm;
params : Matrix_Double_Ptr);
procedure Get (pname : GL.ParameterNameEnm;
params : Matrix_Double_Ptr) renames GetDoublev;
pragma Import (Stdcall, GetDoublev, "glGetDoublev");
procedure GetIntegerv (pname : GL.ParameterNameEnm;
params : Viewport_Ptr);
procedure Get (pname : GL.ParameterNameEnm;
params : Viewport_Ptr) renames GetIntegerv;
pragma Import (Stdcall, GetIntegerv, "glGetIntegerv");
end GLU;