|
- unit uglcTypes;
-
- { Package: OpenGLCore
- Prefix: glc - OpenGL Core
- Beschreibung: diese Unit definiert Enum-Typen die OpenGL Konstanten wrappen und stellt zusätzlich
- Funktions-Wrapper zur verfügung die diese Enum-Typen als Parameter entgegen nehmen }
-
- {$mode objfpc}{$H+}
- {$MACRO ON}
- {$SCOPEDENUMS ON}
-
- interface
-
- uses
- dglOpenGL, sysutils;
-
- type
- TglcFace = (
- faFront = GL_FRONT,
- faBack = GL_BACK,
- faBoth = GL_FRONT_AND_BACK);
-
- TglcPolygonMode = (
- pmPoint = GL_POINT,
- pmLine = GL_LINE,
- pmFill = GL_FILL);
-
- TglcDepthFunc = (
- dfNever = GL_NEVER,
- dfLess = GL_LESS,
- dfEqual = GL_EQUAL,
- dfLessEqual = GL_LEQUAL,
- dfGreater = GL_GREATER,
- dfNotEqual = GL_NOTEQUAL,
- dfGreaterEqual = GL_GEQUAL,
- dfAlways = GL_ALWAYS);
-
- TglcClearBuffer = (
- cbDepthBuffer = GL_DEPTH_BUFFER_BIT,
- cbAccumBuffer = GL_ACCUM_BUFFER_BIT,
- cbStencilBuffer = GL_STENCIL_BUFFER_BIT,
- cbColorBuffer = GL_COLOR_BUFFER_BIT);
-
- TglcTextureMinFilter = (
- mfNearest = GL_NEAREST,
- mfLinear = GL_LINEAR,
- mfNearestMipmapNearest = GL_NEAREST_MIPMAP_NEAREST,
- mfLinearMipmapNearest = GL_LINEAR_MIPMAP_NEAREST,
- mfNearestMipmapLinear = GL_NEAREST_MIPMAP_LINEAR,
- mfLinearMipmapLinear = GL_LINEAR_MIPMAP_LINEAR);
-
- TglcTextureMagFilter = (
- mfNearest = GL_NEAREST,
- mfLinear = GL_LINEAR);
-
- TglcTextureWrap = (
- twClamp = GL_CLAMP,
- twRepeat = GL_REPEAT,
- twClampToBorder = GL_CLAMP_TO_BORDER,
- twClampToEdge = GL_CLAMP_TO_EDGE,
- twMirroredRepeat = GL_MIRRORED_REPEAT);
-
- TglcBlendFactor = (
- bfZero = GL_ZERO,
- bfOne = GL_ONE,
- bfSrcColor = GL_SRC_COLOR,
- bfOneMinusSrcColor = GL_ONE_MINUS_SRC_COLOR,
- bfSrcAlpha = GL_SRC_ALPHA,
- bfOneMinusSrcAlpha = GL_ONE_MINUS_SRC_ALPHA,
- bfDstAlpha = GL_DST_ALPHA,
- bfOneMinusDstAlpha = GL_ONE_MINUS_DST_ALPHA,
- bfDstColor = GL_DST_COLOR,
- bfOneMinusDstColor = GL_ONE_MINUS_DST_COLOR,
- bfSrcAlphaSaturate = GL_SRC_ALPHA_SATURATE,
- bgConstColor = GL_CONSTANT_COLOR,
- bfOneMinusConstColor = GL_ONE_MINUS_CONSTANT_COLOR,
- bfConstAlpha = GL_CONSTANT_ALPHA,
- bfOneMinusConstAlpha = GL_ONE_MINUS_CONSTANT_ALPHA);
-
- TglcBlendMode = (
- bmNone,
- bmAlphaBlend,
- bmAdditiveAlphaBlend,
- bmAdditiveBlend);
-
- TglcFormat = (
- fmUnknown = 0,
- fmColorIndex = GL_COLOR_INDEX,
- fmDepthComponent = GL_DEPTH_COMPONENT,
- fmRed = GL_RED,
- fmGreen = GL_GREEN,
- fmBlue = GL_BLUE,
- fmAlpha = GL_ALPHA,
- fmRGB = GL_RGB,
- fmRGBA = GL_RGBA,
- fmLuminance = GL_LUMINANCE,
- fmLuminanceAlpha = GL_LUMINANCE_ALPHA,
- fmBGR = GL_BGR,
- fmBGRA = GL_BGRA,
- fmDepthStencil = GL_DEPTH_STENCIL);
-
- TglcInternalFormat = (
- ifUnknown = 0,
- ifDepthComponent = GL_DEPTH_COMPONENT,
- ifAlpha = GL_ALPHA,
- ifRGB = GL_RGB,
- ifRGBA = GL_RGBA,
- ifLuminance = GL_LUMINANCE,
- ifLuminanceAlpha = GL_LUMINANCE_ALPHA,
- ifR3G3B2 = GL_R3_G3_B2,
- ifAlpha4 = GL_ALPHA4,
- ifAlpha8 = GL_ALPHA8,
- ifAlpha12 = GL_ALPHA12,
- ifAlpha16 = GL_ALPHA16,
- ifLuminance4 = GL_LUMINANCE4,
- ifLuminance8 = GL_LUMINANCE8,
- ifLuminance12 = GL_LUMINANCE12,
- ifLuminance16 = GL_LUMINANCE16,
- ifLuminance4Alpha4 = GL_LUMINANCE4_ALPHA4,
- ifLuminance6Alpha2 = GL_LUMINANCE6_ALPHA2,
- ifLuminance8Alpha8 = GL_LUMINANCE8_ALPHA8,
- ifLuminance12Alpha4 = GL_LUMINANCE12_ALPHA4,
- ifLuminance12Alpha12 = GL_LUMINANCE12_ALPHA12,
- ifLuminance16Alpha16 = GL_LUMINANCE16_ALPHA16,
- ifIntensity = GL_INTENSITY,
- ifIntensity4 = GL_INTENSITY4,
- ifIntensity8 = GL_INTENSITY8,
- ifIntensity12 = GL_INTENSITY12,
- ifIntensity16 = GL_INTENSITY16,
- ifRGB4 = GL_RGB4,
- ifRGB5 = GL_RGB5,
- ifRGB8 = GL_RGB8,
- ifRGB10 = GL_RGB10,
- ifRGB12 = GL_RGB12,
- ifRGB16 = GL_RGB16,
- ifRGBA2 = GL_RGBA2,
- ifRGBA4 = GL_RGBA4,
- ifRGB5A1 = GL_RGB5_A1,
- ifRGBA8 = GL_RGBA8,
- ifRGB10A2 = GL_RGB10_A2,
- ifRGBA12 = GL_RGBA12,
- ifRGBA16 = GL_RGBA16,
- ifDepthComponent16 = GL_DEPTH_COMPONENT16,
- ifDepthComponent24 = GL_DEPTH_COMPONENT24,
- ifDepthComponent32 = GL_DEPTH_COMPONENT32,
- ifCompressedAlpha = GL_COMPRESSED_ALPHA,
- ifCompressedLuminance = GL_COMPRESSED_LUMINANCE,
- ifCompressedLuminanceAlpha = GL_COMPRESSED_LUMINANCE_ALPHA,
- ifCompressedIntensity = GL_COMPRESSED_INTENSITY,
- ifCompressedRGB = GL_COMPRESSED_RGB,
- ifCompressedRGBA = GL_COMPRESSED_RGBA,
- ifRGBA32f = GL_RGBA32F,
- ifRGB32f = GL_RGB32F,
- ifRGBA16F = GL_RGBA16F,
- ifRGB16F = GL_RGB16F,
- ifDepth24Stencil8 = GL_DEPTH24_STENCIL8,
- ifSRGB = GL_SRGB,
- ifSRGB8 = GL_SRGB8,
- ifSRGBA = GL_SRGB_ALPHA,
- ifSRGBA8 = GL_SRGB8_ALPHA8,
- ifSLuminanceAlpha = GL_SLUMINANCE_ALPHA,
- ifSLuminance8Alpha8 = GL_SLUMINANCE8_ALPHA8,
- ifSLuminance = GL_SLUMINANCE,
- ifSLuminance8 = GL_SLUMINANCE8,
- ifDepth32fStencil8 = GL_DEPTH32F_STENCIL8,
- ifStencil1 = GL_STENCIL_INDEX1,
- ifStencil4 = GL_STENCIL_INDEX4,
- ifStencil8 = GL_STENCIL_INDEX8,
- ifStencil16 = GL_STENCIL_INDEX16);
-
- TglcAttachment = (
- atDepthStencil = GL_DEPTH_STENCIL_ATTACHMENT,
- atColor0 = GL_COLOR_ATTACHMENT0,
- atColor1 = GL_COLOR_ATTACHMENT1,
- atColor2 = GL_COLOR_ATTACHMENT2,
- atColor3 = GL_COLOR_ATTACHMENT3,
- atColor4 = GL_COLOR_ATTACHMENT4,
- atColor5 = GL_COLOR_ATTACHMENT5,
- atColor6 = GL_COLOR_ATTACHMENT6,
- atColor7 = GL_COLOR_ATTACHMENT7,
- atColor8 = GL_COLOR_ATTACHMENT8,
- atColor9 = GL_COLOR_ATTACHMENT9,
- atColor10 = GL_COLOR_ATTACHMENT10,
- atColor11 = GL_COLOR_ATTACHMENT11,
- atColor12 = GL_COLOR_ATTACHMENT12,
- atColor13 = GL_COLOR_ATTACHMENT13,
- atColor14 = GL_COLOR_ATTACHMENT14,
- atColor15 = GL_COLOR_ATTACHMENT15,
- atDepth = GL_DEPTH_ATTACHMENT,
- atStencil = GL_STENCIL_ATTACHMENT);
-
- TglcShaderType = (
- stFragment = GL_FRAGMENT_SHADER,
- stVertex = GL_VERTEX_SHADER,
- stGeometry = GL_GEOMETRY_SHADER,
- stTessEvaluation = GL_TESS_EVALUATION_SHADER,
- stTessControl = GL_TESS_CONTROL_SHADER);
-
- TglcBufferTarget = (
- btArrayBuffer = GL_ARRAY_BUFFER,
- btElementArrayBuffer = GL_ELEMENT_ARRAY_BUFFER);
-
- TglcBufferUsage = (
- buStreamDraw = GL_STREAM_DRAW,
- buStreamRead = GL_STREAM_READ,
- buStreamCopy = GL_STREAM_COPY,
- buStaticDraw = GL_STATIC_DRAW,
- buStaticRead = GL_STATIC_READ,
- buStaticCopy = GL_STATIC_COPY,
- buDynamicDraw = GL_DYNAMIC_DRAW,
- buDynamicRead = GL_DYNAMIC_READ,
- buDynamicCopy = GL_DYNAMIC_COPY);
-
- TglcBufferAccess = (
- baReadOnly = GL_READ_ONLY,
- baWriteOnly = GL_WRITE_ONLY,
- baReadWrite = GL_READ_WRITE);
-
- EOpenGL = class(Exception)
- private
- fErrorCode: GLenum;
- public
- property ErrorCode: GLenum read fErrorCode;
- constructor Create(const aErrorCode: GLenum);
- constructor Create(const aMsg: String; const aErrorCode: GLenum);
- end;
-
- procedure glcRenderFace(const aValue: TglcFace); inline;
- procedure glcPolygonMode(const aFace: TglcFace; const aValue: TglcPolygonMode); inline;
- procedure glcDepthFunc(const aValue: TglcDepthFunc); inline;
- procedure glcBlendFunc(const aSource, aDest: TglcBlendFactor); inline; overload;
- procedure glcBlendFunc(const aMode: TglcBlendMode); inline; overload;
- procedure glcCheckAndRaiseError;
-
- implementation
-
- type
- TglcBlendModeValue = packed record
- src, dst: TglcBlendFactor;
- end;
-
- const
- BLEND_MODE_VALUES: array[TglcBlendMode] of TglcBlendModeValue = (
- (src: TglcBlendFactor.bfOne; dst: TglcBlendFactor.bfZero), //bmNone
- (src: TglcBlendFactor.bfSrcAlpha; dst: TglcBlendFactor.bfOneMinusSrcAlpha), //bmAlphaBlend
- (src: TglcBlendFactor.bfSrcAlpha; dst: TglcBlendFactor.bfOne), //bmAdditiveAlphaBlend
- (src: TglcBlendFactor.bfOne; dst: TglcBlendFactor.bfOne)); //bmAdditiveBlend
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure glcRenderFace(const aValue: TglcFace);
- begin
- case aValue of
- TglcFace.faBoth: begin
- glDisable(GL_CULL_FACE);
- end;
- TglcFace.faFront: begin
- glEnable(GL_CULL_FACE);
- glCullFace(GL_BACK);
- end;
- TglcFace.faBack: begin
- glEnable(GL_CULL_FACE);
- glCullFace(GL_FRONT);
- end;
- end;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure glcPolygonMode(const aFace: TglcFace; const aValue: TglcPolygonMode);
- begin
- glPolygonMode(GLenum(aFace), GLenum(aValue));
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure glcDepthFunc(const aValue: TglcDepthFunc);
- begin
- glDepthFunc(GLenum(aValue));
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure glcBlendFunc(const aSource, aDest: TglcBlendFactor);
- begin
- glBlendFunc(GLenum(aSource), GLenum(aDest));
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure glcBlendFunc(const aMode: TglcBlendMode); overload;
- begin
- glBlendFunc(GLenum(BLEND_MODE_VALUES[aMode].src), GLenum(BLEND_MODE_VALUES[aMode].dst));
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure glcCheckAndRaiseError;
- var
- e: GLenum;
- begin
- e := glGetError();
- if (e <> GL_NO_ERROR) then
- raise EOpenGL.Create(e);
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //EOpenGL///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- constructor EOpenGL.Create(const aErrorCode: GLenum);
- begin
- fErrorCode := aErrorCode;
- inherited Create(gluErrorString(fErrorCode));
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- constructor EOpenGL.Create(const aMsg: String; const aErrorCode: GLenum);
- begin
- fErrorCode := aErrorCode;
- inherited Create(aMsg + ': ' + gluErrorString(fErrorCode))
- end;
-
- end.
|