Various OpenGL utilities.
Implements various low-level helpers for OpenGL programming. Simple wrappers for OpenGL procedures (like glVertexv, that is overloaded for various vector types, and calls appropriate version like glVertex3fv based on parameter type). Also simple drawing routines for basic primitives (boxes etc.). This unit does not assume that you initialized OpenGL in any particular way (e.g. using GLWindow, Glut, SDL, or whatever).
function Vector2f(x, y: TGLfloat): TVector2f; |
function Vector3f(x, y: TGLfloat; z: TGLfloat =0.0): TVector3f; overload; |
function Vector3f(const v3: TVector3d): TVector3f; overload; |
function Vector3f(const v3: TVector3ub): TVector3f; overload; |
function Vector3d(x, y: TGLdouble; z: TGLdouble =0.0): TVector3d; overload; |
function Vector3d(const v: TVector3f): TVector3d; overload; |
function Vector4f(x, y: TGLfloat; z: TGLfloat =0; w: TGLfloat =1.0): TVector4f; overload; |
function Vector4f(const v3: TVector3f; w: TGLfloat =1.0): TVector4f; overload; |
function Vector4f(const ub: TVector4ub): TVector4f; overload; |
function Vector3ub(x, y, z: TGLubyte): TVector3ub; |
function Vector4ub(x, y, z, w: TGLubyte): TVector4ub; overload; |
function Vector4ub(const f4: TVector4f): TVector4ub; overload; |
function Normal3f(x, y: TGLfloat; z: TGLfloat =0): TVector3f; overload; |
procedure LoadAllExtensions; |
procedure CheckGLErrors(const AdditionalComment: string = '' ); overload; |
procedure ReportGLError(ErrorCode: TGLenum); cdecl; |
function glGetFloat(pname: TGLEnum): TGLfloat; |
function glGetInteger(pname: TGLEnum): TGLint; |
function glGetBoolean(pname: TGLEnum): TGLboolean; |
function glGetDouble(pname: TGLEnum): TGLdouble; |
procedure glColorv(const v: TVector3b); overload; |
procedure glColorv(const v: TVector3ub); overload; |
procedure glColorv(const v: TVector4b); overload; |
procedure glColorv(const v: TVector4ub); overload; |
procedure glNormalv(const v: TVector3b); overload; |
procedure glTranslatev(const V: TVector3f); overload; |
procedure glTranslatev(const V: TVector3d); overload; |
procedure glTranslatev(const V: TVector3_Single); overload; |
procedure glTranslatev(const V: TVector3_Double); overload; |
procedure glScalev(const V: TVector3f); overload; |
procedure glScalev(const V: TVector3d); overload; |
procedure glScalev(const V: TVector3_Single); overload; |
procedure glScalev(const V: TVector3_Double); overload; |
procedure glRotatev(const Angle: TGLfloat; const V: TVector3f); overload; |
procedure glRotatev(const Angle: TGLdouble; const V: TVector3d); overload; |
procedure glClipPlane(plane: GLenum; const V: TVector4d); overload; |
procedure glNormalv(const v: TVector3d); overload; |
procedure glNormalv(const v: TVector3f); overload; |
procedure glNormalv(const v: TVector3i); overload; |
procedure glNormalv(const v: TVector3s); overload; |
procedure glColorv(const v: TVector3d); overload; |
procedure glColorv(const v: TVector3f); overload; |
procedure glColorv(const v: TVector3i); overload; |
procedure glColorv(const v: TVector3s); overload; |
procedure glColorv(const v: TVector3ui); overload; |
procedure glColorv(const v: TVector3us); overload; |
procedure glColorv(const v: TVector4d); overload; |
procedure glColorv(const v: TVector4f); overload; |
procedure glColorv(const v: TVector4i); overload; |
procedure glColorv(const v: TVector4s); overload; |
procedure glColorv(const v: TVector4ui); overload; |
procedure glColorv(const v: TVector4us); overload; |
procedure glMaterialv(face, pname: TGLEnum; const params: TVector4f); overload; |
procedure glMaterialv(face, pname: TGLEnum; const params: TVector4i); overload; |
procedure glVertexv(const v: TVector2d); overload; |
procedure glVertexv(const v: TVector2f); overload; |
procedure glVertexv(const v: TVector2i); overload; |
procedure glVertexv(const v: TVector2s); overload; |
procedure glVertexv(const v: TVector3d); overload; |
procedure glVertexv(const v: TVector3f); overload; |
procedure glVertexv(const v: TVector3i); overload; |
procedure glVertexv(const v: TVector3s); overload; |
procedure glVertexv(const v: TVector4d); overload; |
procedure glVertexv(const v: TVector4f); overload; |
procedure glVertexv(const v: TVector4i); overload; |
procedure glVertexv(const v: TVector4s); overload; |
procedure glVertexv(const v: TVector2_Double); overload; |
procedure glVertexv(const v: TVector2_Single); overload; |
procedure glVertexv(const v: TVector3_Double); overload; |
procedure glVertexv(const v: TVector3_Single); overload; |
procedure glVertexv(const v: TVector4_Double); overload; |
procedure glVertexv(const v: TVector4_Single); overload; |
procedure glTexCoordv(const v: TVector1d); overload; |
procedure glTexCoordv(const v: TVector1f); overload; |
procedure glTexCoordv(const v: TVector1i); overload; |
procedure glTexCoordv(const v: TVector1s); overload; |
procedure glTexCoordv(const v: TVector2d); overload; |
procedure glTexCoordv(const v: TVector2f); overload; |
procedure glTexCoordv(const v: TVector2i); overload; |
procedure glTexCoordv(const v: TVector2s); overload; |
procedure glTexCoordv(const v: TVector3d); overload; |
procedure glTexCoordv(const v: TVector3f); overload; |
procedure glTexCoordv(const v: TVector3i); overload; |
procedure glTexCoordv(const v: TVector3s); overload; |
procedure glTexCoordv(const v: TVector4d); overload; |
procedure glTexCoordv(const v: TVector4f); overload; |
procedure glTexCoordv(const v: TVector4i); overload; |
procedure glTexCoordv(const v: TVector4s); overload; |
procedure glTexGenv(coord, pname: TGLenum; const params: TVector4d); overload; |
procedure glTexGenv(coord, pname: TGLenum; const params: TVector4f); overload; |
procedure glTexGenv(coord, pname: TGLenum; const params: TVector4i); overload; |
procedure glLightv(light, pname: TGLEnum; const params: TVector4f); overload; |
procedure glLightv(light, pname: TGLEnum; const params: TVector4i); overload; |
procedure glLightv(light, pname: TGLEnum; const params: TVector3f); overload; |
procedure glLightv(light, pname: TGLEnum; const params: TVector3i); overload; |
procedure glLightModelv(pname: TGLenum; const params: TVector4f); overload; |
procedure glLightModelv(pname: TGLenum; const params: TVector4i); overload; |
procedure glFogv(pname: TGLEnum; const params: TVector4f); overload; |
procedure glFogv(pname: TGLEnum; const params: TVector4i); overload; |
procedure glMultMatrix(const m: TMatrix4f); overload; |
procedure glMultMatrix(const m: TMatrix4d); overload; |
procedure glLoadMatrix(const m: TMatrix4f); overload; |
procedure glLoadMatrix(const m: TMatrix4d); overload; |
procedure glTexEnvv(target, pname: TGLEnum; const params: TVector4f); overload; |
procedure glTexEnvv(target, pname: TGLEnum; const params: TVector4i); overload; |
procedure SavePixelStoreUnpack(out pixUnpack: TPixelStoreUnpack); |
procedure LoadPixelStoreUnpack(const pixUnpack: TPixelStoreUnpack); |
procedure BeforeUnpackNotAlignedRGBImage(out unpackdata: TUnpackNotAlignedData; imageWidth: cardinal); |
procedure AfterUnpackNotAlignedRGBImage(const unpackData: TUnpackNotAlignedData; imageWidth: cardinal); |
procedure BeforePackNotAlignedRGBImage(out packdata: TPackNotAlignedData; imageWidth: cardinal); |
procedure AfterPackNotAlignedRGBImage(const packData: TPackNotAlignedData; imageWidth: cardinal); |
procedure BeforeUnpackImage(out unpackdata: TUnpackNotAlignedData; image: TImage); |
procedure AfterUnpackImage(const unpackData: TUnpackNotAlignedData; image: TImage); |
procedure ProjectionGLPerspective(const fovy, aspect, zNear, zFar: TGLdouble); |
procedure ProjectionGLOrtho(const left, right, bottom, top, zNear, zFar: TGLdouble); overload; |
procedure ProjectionGLOrtho(const left, right, bottom, top: TGLdouble); overload; |
function RandomPolyStipple(const BlackChance: Extended): TPolygonStipple; |
function RandomPolyStippleBy16(const BlackChance: Extended): TPolygonStipple; |
function RandomPolyStippleBy8(const BlackChance: Extended): TPolygonStipple; |
procedure SetGLEnabled(value: TGLenum; isEnabled: boolean); |
procedure VerticalGLLine(x, y1, y2: TGLfloat); |
procedure HorizontalGLLine(x1, x2, y: TGLfloat); |
procedure DrawGLBorderedRectangle(const x1, y1, x2, y2: TGLfloat; const InsideCol, BorderCol: TVector4f); overload; |
procedure DrawGLBorderedRectangle(const x1, y1, x2, y2: TGLfloat; const InsideCol, BorderCol: TVector4f; Stipple: PPolygonStipple); overload; |
procedure DrawGLRectBorder(const x1, y1, x2, y2: TGLfloat); overload; |
procedure DrawGLBorderedRectangle(const R: TIntRect; const InsideCol, BorderCol: TVector4f); overload; |
procedure DrawGLBorderedRectangle(const R: TIntRect; const InsideCol, BorderCol: TVector4f; Stipple: PPolygonStipple); overload; |
procedure DrawGLRectBorder(const R: TIntRect); overload; |
function UnProjectGL(winx, winy, winz: TGLdouble): TVector3d; |
procedure fullGLDiskSqueezedTex(radius: TGLdouble; slices: Cardinal); |
procedure DrawArrow; overload; |
procedure DrawArrow(grotThickness, grotLength: TGLfloat); overload; |
function NewGLUQuadric( Texture: TGLboolean = GL_TRUE; Normals: TGLenum = GLU_NONE; Orientation: TGLenum = GLU_OUTSIDE; DrawStyle: TGLenum = GLU_FILL): PGLUQuadric; overload; |
procedure KamGluSphere( const Radius: TGLdouble; const Slices, Stacks: TGLint; Texture: TGLboolean = GL_TRUE; Normals: TGLenum = GLU_NONE; Orientation: TGLenum = GLU_OUTSIDE; DrawStyle: TGLenum = GLU_FILL); |
procedure DrawGLPlane(x1, y1, x2, y2: TGLfloat; constValue: TGLfloat; constCoord, DetailLevelX, DetailLevelY: integer; constCoordGivesNormal1: boolean); |
procedure DrawGLPlaneSpecialTex(x1, y1, x2, y2: TGLfloat; constValue: TGLfloat; constCoord, DetailLevelX, DetailLevelY: integer; constCoordGivesNormal1: boolean; texX1, texY1, texX2, texY2: TGLfloat; order_ST_XYZ: boolean); |
procedure DrawGLBox(const Box: TBox3d; DetailX, DetailY, DetailZ: integer; ccwOutside: boolean); overload; |
procedure DrawGLBox(const x1, y1, z1, x2, y2, z2: TGLfloat; DetailX, DetailY, DetailZ: integer; ccwOutside: boolean); overload; |
procedure glDrawBox3dWire(const Box: TBox3d); |
procedure DrawGLTriangle(const p1, p2, p3: TVector3f; const Tex1, Tex2, Tex3: TVector2f; DetailLev: Cardinal); |
procedure glProjectionPushPop2D(proc: TProcData; Data: Pointer); |
procedure glProjectionPushPopOrtho(proc: TProcData; Data: Pointer; const Left, Right, Bottom, Top, ZNear, ZFar: TGLdouble); |
procedure glProjectionPushPopOrtho2D(proc: TProcData; Data: Pointer; const Left, Right, Bottom, Top: TGLdouble); |
procedure glProjectionPushPopPerspective(proc: TProcData; Data: Pointer; const FovyDeg, Aspect, ZNear, ZFar: TGLdouble); |
procedure glProjectionPushPop(proc: TProcData; Data: Pointer; const projMatrix: TMatrix4f); |
procedure DrawGLBlackOutRect(const BlackOutColor: TVector3f; const BlackOutIntensity, x1, y1, x2, y2: TGLfloat); |
function GLCapsString: string; |
procedure glClearColorv(const v: TVector3Single; alpha: Single); |
function glGenListsCheck(range: TGLsizei; const Place: string): TGLuint; |
procedure glFreeDisplayList(var list: TGLuint); |
procedure glFreeTexture(var Tex: TGLuint); |
procedure glSetDepthAndColorWriteable(Writeable: TGLboolean); |
procedure SetWindowPos(const X, Y: TGLfloat); overload; |
procedure SetWindowPos(const X, Y: TGLint); overload; |
procedure SetWindowPosZero; |
NullVector2i : TVector2i = (0, 0); |
NullVector2f : TVector2f = (0, 0); |
NullVector2d : TVector2d = (0, 0); |
NullVector2p : TVector2p = (nil, nil); |
XVector2i : TVector2i = (1, 0); |
XVector2f : TVector2f = (1, 0); |
XVector2d : TVector2d = (1, 0); |
YVector2i : TVector2i = (0, 1); |
YVector2f : TVector2f = (0, 1); |
YVector2d : TVector2d = (0, 1); |
NullVector3i : TVector3i = (0, 0, 0); |
NullVector3f : TVector3f = (0, 0, 0); |
NullVector3d : TVector3d = (0, 0, 0); |
NullVector3p : TVector3p = (nil, nil, nil); |
XVector3i : TVector3i = (1, 0, 0); |
XVector3f : TVector3f = (1, 0, 0); |
XVector3d : TVector3d = (1, 0, 0); |
YVector3i : TVector3i = (0, 1, 0); |
YVector3f : TVector3f = (0, 1, 0); |
YVector3d : TVector3d = (0, 1, 0); |
ZVector3i : TVector3i = (0, 0, 1); |
ZVector3f : TVector3f = (0, 0, 1); |
ZVector3d : TVector3d = (0, 0, 1); |
NullVector4i : TVector4i = (0, 0, 0, 0); |
NullVector4f : TVector4f = (0, 0, 0, 0); |
NullVector4d : TVector4d = (0, 0, 0, 0); |
NullVector4p : TVector4p = (nil, nil, nil, nil); |
NullMatrix2f: TMatrix2f = ((0, 0), (0, 0)); |
NullMatrix2d: TMatrix2d = ((0, 0), (0, 0)); |
NullMatrix2i: TMatrix2i = ((0, 0), (0, 0)); |
NullMatrix3f: TMatrix3f = ((0, 0, 0), (0, 0, 0), (0, 0, 0)); |
NullMatrix3d: TMatrix3d = ((0, 0, 0), (0, 0, 0), (0, 0, 0)); |
NullMatrix3i: TMatrix3i = ((0, 0, 0), (0, 0, 0), (0, 0, 0)); |
NullMatrix4f: TMatrix4f = ((0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)); |
NullMatrix4d: TMatrix4d = ((0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)); |
NullMatrix4i: TMatrix4i = ((0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)); |
IdentityMatrix2f: TMatrix2f = ((1, 0), (0, 1)); |
IdentityMatrix2d: TMatrix2d = ((1, 0), (0, 1)); |
IdentityMatrix2i: TMatrix2i = ((1, 0), (0, 1)); |
IdentityMatrix3f: TMatrix3f = ((1, 0, 0), (0, 1, 0), (0, 0, 1)); |
IdentityMatrix3d: TMatrix3d = ((1, 0, 0), (0, 1, 0), (0, 0, 1)); |
IdentityMatrix3i: TMatrix3i = ((1, 0, 0), (0, 1, 0), (0, 0, 1)); |
IdentityMatrix4f: TMatrix4f = ((1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1)); |
IdentityMatrix4d: TMatrix4d = ((1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1)); |
IdentityMatrix4i: TMatrix4i = ((1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1)); |
DefaultMatAmbientColor4ub : TColor4ub = (51, 51, 51, 255); |
DefaultMatAmbientColor4f : TColor4f = (0.2, 0.2, 0.2, 1.0); |
DefaultMatDiffuseColor4ub : TColor4ub = (204, 204, 204, 255); |
DefaultMatDiffuseColor4f : TColor4f = (0.8, 0.8, 0.8, 1.0); |
DefaultMatSpecularColor4ub : TColor4ub = (0, 0, 0, 255); |
DefaultMatSpecularColor4f : TColor4f = (0, 0, 0, 1.0); |
NullHVector3f : THVector3f = (0, 0, 1); |
NullHVector3d : THVector3d = (0, 0, 1); |
XHVector3f : THVector3f = (1, 0, 1); |
XHVector3d : THVector3d = (1, 0, 1); |
YHVector3f : THVector3f = (0, 1, 1); |
YHVector3d : THVector3d = (0, 1, 1); |
NullHVector4f : THVector4f = (0, 0, 0, 1); |
NullHVector4d : THVector4d = (0, 0, 0, 1); |
XHVector4f : THVector4f = (1, 0, 0, 1); |
XHVector4d : THVector4d = (1, 0, 0, 1); |
YHVector4f : THVector4f = (0, 1, 0, 1); |
YHVector4d : THVector4d = (0, 1, 0, 1); |
ZHVector4f : THVector4f = (0, 0, 1, 1); |
ZHVector4d : THVector4d = (0, 0, 1, 1); |
Vector3fPoint: function(const v: TVector4f): TVector3f =
VectorMath.Vector3SinglePoint; |
Vector3fCut: function(const v: TVector4f): TVector3f =
VectorMath.Vector3SingleCut; |
Vector3fFromStr: function (const s: string): TVector3Single =
VectorMath.Vector3SingleFromStr; |
Vector3dFromStr: function (const s: string): TVector3Double =
VectorMath.Vector3DoubleFromStr; |
Triangle3d: function(const t: TTriangle3Single): TTriangle3Double =
VectorMath.Triangle3Double; |
BWColor3fvTo1st: procedure(v: PVector3Single) =
VectorMath.BWColor3SinglevTo1st; |
BWColor3ubvTo1st: procedure(v: PVector3Byte) =
VectorMath.BWColor3BytevTo1st; |
OpenGLDLL =
'libGL.so.1'
; |
GluDLL =
'libGLU.so.1'
; |
HalftoneStipple: TPolygonStipple=
( $AA, $AA, $AA, $AA, $55, $55, $55, $55, $AA, $AA, $AA, $AA, $55, $55, $55, $55,
$AA, $AA, $AA, $AA, $55, $55, $55, $55, $AA, $AA, $AA, $AA, $55, $55, $55, $55,
$AA, $AA, $AA, $AA, $55, $55, $55, $55, $AA, $AA, $AA, $AA, $55, $55, $55, $55,
$AA, $AA, $AA, $AA, $55, $55, $55, $55, $AA, $AA, $AA, $AA, $55, $55, $55, $55,
$AA, $AA, $AA, $AA, $55, $55, $55, $55, $AA, $AA, $AA, $AA, $55, $55, $55, $55,
$AA, $AA, $AA, $AA, $55, $55, $55, $55, $AA, $AA, $AA, $AA, $55, $55, $55, $55,
$AA, $AA, $AA, $AA, $55, $55, $55, $55, $AA, $AA, $AA, $AA, $55, $55, $55, $55,
$AA, $AA, $AA, $AA, $55, $55, $55, $55, $AA, $AA, $AA, $AA, $55, $55, $55, $55
); |
ThreeQuartersStipple: TPolygonStipple=
( $DD, $DD, $DD, $DD, $77, $77, $77, $77, $EE, $EE, $EE, $EE, $BB, $BB, $BB, $BB,
$DD, $DD, $DD, $DD, $77, $77, $77, $77, $EE, $EE, $EE, $EE, $BB, $BB, $BB, $BB,
$DD, $DD, $DD, $DD, $77, $77, $77, $77, $EE, $EE, $EE, $EE, $BB, $BB, $BB, $BB,
$DD, $DD, $DD, $DD, $77, $77, $77, $77, $EE, $EE, $EE, $EE, $BB, $BB, $BB, $BB,
$DD, $DD, $DD, $DD, $77, $77, $77, $77, $EE, $EE, $EE, $EE, $BB, $BB, $BB, $BB,
$DD, $DD, $DD, $DD, $77, $77, $77, $77, $EE, $EE, $EE, $EE, $BB, $BB, $BB, $BB,
$DD, $DD, $DD, $DD, $77, $77, $77, $77, $EE, $EE, $EE, $EE, $BB, $BB, $BB, $BB,
$DD, $DD, $DD, $DD, $77, $77, $77, $77, $EE, $EE, $EE, $EE, $BB, $BB, $BB, $BB
); |
GLDefaultLightModelAmbient: TVector4Single = (0.2, 0.2, 0.2, 1.0); |