4 Prefix: glc - OpenGL Core
5 Beschreibung: diese Unit definiert Enum-Typen die OpenGL Konstanten wrappen und stellt zusätzlich
6 Funktions-Wrapper zur verfügung die diese Enum-Typen als Parameter entgegen nehmen }
15 {$IFNDEF OPENGL_ES}dglOpenGL{$ELSE}dglOpenGLES{$ENDIF}, sysutils;
21 faBoth = GL_FRONT_AND_BACK);
34 dfLessEqual = GL_LEQUAL,
35 dfGreater = GL_GREATER,
36 dfNotEqual = GL_NOTEQUAL,
37 dfGreaterEqual = GL_GEQUAL,
38 dfAlways = GL_ALWAYS);
41 cbDepthBuffer = GL_DEPTH_BUFFER_BIT,
43 cbAccumBuffer = GL_ACCUM_BUFFER_BIT,
45 cbStencilBuffer = GL_STENCIL_BUFFER_BIT,
46 cbColorBuffer = GL_COLOR_BUFFER_BIT);
48 TglcTextureMinFilter = (
49 mfNearest = GL_NEAREST,
51 mfNearestMipmapNearest = GL_NEAREST_MIPMAP_NEAREST,
52 mfLinearMipmapNearest = GL_LINEAR_MIPMAP_NEAREST,
53 mfNearestMipmapLinear = GL_NEAREST_MIPMAP_LINEAR,
54 mfLinearMipmapLinear = GL_LINEAR_MIPMAP_LINEAR);
56 TglcTextureMagFilter = (
57 mfNearest = GL_NEAREST,
58 mfLinear = GL_LINEAR);
66 twClampToBorder = GL_CLAMP_TO_BORDER,
68 twClampToEdge = GL_CLAMP_TO_EDGE,
69 twMirroredRepeat = GL_MIRRORED_REPEAT);
74 bfSrcColor = GL_SRC_COLOR,
75 bfOneMinusSrcColor = GL_ONE_MINUS_SRC_COLOR,
76 bfSrcAlpha = GL_SRC_ALPHA,
77 bfOneMinusSrcAlpha = GL_ONE_MINUS_SRC_ALPHA,
78 bfDstAlpha = GL_DST_ALPHA,
79 bfOneMinusDstAlpha = GL_ONE_MINUS_DST_ALPHA,
80 bfDstColor = GL_DST_COLOR,
81 bfOneMinusDstColor = GL_ONE_MINUS_DST_COLOR,
82 bfSrcAlphaSaturate = GL_SRC_ALPHA_SATURATE,
83 bgConstColor = GL_CONSTANT_COLOR,
84 bfOneMinusConstColor = GL_ONE_MINUS_CONSTANT_COLOR,
85 bfConstAlpha = GL_CONSTANT_ALPHA,
86 bfOneMinusConstAlpha = GL_ONE_MINUS_CONSTANT_ALPHA);
97 fmColorIndex = GL_COLOR_INDEX,
99 fmDepthComponent = GL_DEPTH_COMPONENT,
106 fmLuminance = GL_LUMINANCE,
107 fmLuminanceAlpha = GL_LUMINANCE_ALPHA,
112 fmDepthStencil = GL_DEPTH_STENCIL);
114 TglcInternalFormat = (
116 ifDepthComponent = GL_DEPTH_COMPONENT,
120 ifLuminance = GL_LUMINANCE,
121 ifLuminanceAlpha = GL_LUMINANCE_ALPHA,
123 ifR3G3B2 = GL_R3_G3_B2,
124 ifAlpha4 = GL_ALPHA4,
125 ifAlpha8 = GL_ALPHA8,
126 ifAlpha12 = GL_ALPHA12,
127 ifAlpha16 = GL_ALPHA16,
128 ifLuminance4 = GL_LUMINANCE4,
129 ifLuminance8 = GL_LUMINANCE8,
130 ifLuminance12 = GL_LUMINANCE12,
131 ifLuminance16 = GL_LUMINANCE16,
132 ifLuminance4Alpha4 = GL_LUMINANCE4_ALPHA4,
133 ifLuminance6Alpha2 = GL_LUMINANCE6_ALPHA2,
134 ifLuminance8Alpha8 = GL_LUMINANCE8_ALPHA8,
135 ifLuminance12Alpha4 = GL_LUMINANCE12_ALPHA4,
136 ifLuminance12Alpha12 = GL_LUMINANCE12_ALPHA12,
137 ifLuminance16Alpha16 = GL_LUMINANCE16_ALPHA16,
138 ifIntensity = GL_INTENSITY,
139 ifIntensity4 = GL_INTENSITY4,
140 ifIntensity8 = GL_INTENSITY8,
141 ifIntensity12 = GL_INTENSITY12,
142 ifIntensity16 = GL_INTENSITY16,
154 ifRGB5A1 = GL_RGB5_A1,
156 ifRGB10A2 = GL_RGB10_A2,
158 ifRGBA12 = GL_RGBA12,
159 ifRGBA16 = GL_RGBA16,
161 ifDepthComponent16 = GL_DEPTH_COMPONENT16,
162 ifDepthComponent24 = GL_DEPTH_COMPONENT24,
164 ifDepthComponent32 = GL_DEPTH_COMPONENT32,
165 ifCompressedAlpha = GL_COMPRESSED_ALPHA,
166 ifCompressedLuminance = GL_COMPRESSED_LUMINANCE,
167 ifCompressedLuminanceAlpha = GL_COMPRESSED_LUMINANCE_ALPHA,
168 ifCompressedIntensity = GL_COMPRESSED_INTENSITY,
169 ifCompressedRGB = GL_COMPRESSED_RGB,
170 ifCompressedRGBA = GL_COMPRESSED_RGBA,
172 ifRGBA32f = GL_RGBA32F,
173 ifRGB32f = GL_RGB32F,
174 ifRGBA16F = GL_RGBA16F,
175 ifRGB16F = GL_RGB16F,
176 ifDepth24Stencil8 = GL_DEPTH24_STENCIL8,
180 ifSRGBA = GL_SRGB_ALPHA,
182 ifSRGBA8 = GL_SRGB8_ALPHA8,
184 ifSLuminanceAlpha = GL_SLUMINANCE_ALPHA,
185 ifSLuminance8Alpha8 = GL_SLUMINANCE8_ALPHA8,
186 ifSLuminance = GL_SLUMINANCE,
187 ifSLuminance8 = GL_SLUMINANCE8,
189 ifDepth32fStencil8 = GL_DEPTH32F_STENCIL8,
191 ifStencil1 = GL_STENCIL_INDEX1,
192 ifStencil4 = GL_STENCIL_INDEX4,
194 ifStencil8 = GL_STENCIL_INDEX8
196 , ifStencil16 = GL_STENCIL_INDEX16
201 atDepthStencil = GL_DEPTH_STENCIL_ATTACHMENT,
202 atColor0 = GL_COLOR_ATTACHMENT0,
203 atColor1 = GL_COLOR_ATTACHMENT1,
204 atColor2 = GL_COLOR_ATTACHMENT2,
205 atColor3 = GL_COLOR_ATTACHMENT3,
206 atColor4 = GL_COLOR_ATTACHMENT4,
207 atColor5 = GL_COLOR_ATTACHMENT5,
208 atColor6 = GL_COLOR_ATTACHMENT6,
209 atColor7 = GL_COLOR_ATTACHMENT7,
210 atColor8 = GL_COLOR_ATTACHMENT8,
211 atColor9 = GL_COLOR_ATTACHMENT9,
212 atColor10 = GL_COLOR_ATTACHMENT10,
213 atColor11 = GL_COLOR_ATTACHMENT11,
214 atColor12 = GL_COLOR_ATTACHMENT12,
215 atColor13 = GL_COLOR_ATTACHMENT13,
216 atColor14 = GL_COLOR_ATTACHMENT14,
217 atColor15 = GL_COLOR_ATTACHMENT15,
218 atDepth = GL_DEPTH_ATTACHMENT,
219 atStencil = GL_STENCIL_ATTACHMENT);
222 stFragment = GL_FRAGMENT_SHADER,
223 stVertex = GL_VERTEX_SHADER
225 , stGeometry = GL_GEOMETRY_SHADER
226 , stTessEvaluation = GL_TESS_EVALUATION_SHADER
227 , stTessControl = GL_TESS_CONTROL_SHADER
232 btArrayBuffer = GL_ARRAY_BUFFER,
233 btElementArrayBuffer = GL_ELEMENT_ARRAY_BUFFER);
236 buStreamDraw = GL_STREAM_DRAW,
237 buStreamRead = GL_STREAM_READ,
238 buStreamCopy = GL_STREAM_COPY,
239 buStaticDraw = GL_STATIC_DRAW,
240 buStaticRead = GL_STATIC_READ,
241 buStaticCopy = GL_STATIC_COPY,
242 buDynamicDraw = GL_DYNAMIC_DRAW,
243 buDynamicRead = GL_DYNAMIC_READ,
244 buDynamicCopy = GL_DYNAMIC_COPY);
247 baReadOnly = GL_READ_ONLY,
248 baWriteOnly = GL_WRITE_ONLY,
249 baReadWrite = GL_READ_WRITE);
251 EOpenGL = class(Exception)
255 property ErrorCode: GLenum read fErrorCode;
256 constructor Create(const aErrorCode: GLenum);
257 constructor Create(const aMsg: String; const aErrorCode: GLenum);
260 procedure glcRenderFace(const aValue: TglcFace); inline;
261 procedure glcDepthFunc(const aValue: TglcDepthFunc); inline;
262 procedure glcBlendFunc(const aSource, aDest: TglcBlendFactor); inline; overload;
263 procedure glcBlendFunc(const aMode: TglcBlendMode); inline; overload;
264 procedure glcCheckAndRaiseError;
266 procedure glcPolygonMode(const aFace: TglcFace; const aValue: TglcPolygonMode); inline;
272 TglcBlendModeValue = packed record
273 src, dst: TglcBlendFactor;
277 BLEND_MODE_VALUES: array[TglcBlendMode] of TglcBlendModeValue = (
278 (src: TglcBlendFactor.bfOne; dst: TglcBlendFactor.bfZero), //bmNone
279 (src: TglcBlendFactor.bfSrcAlpha; dst: TglcBlendFactor.bfOneMinusSrcAlpha), //bmAlphaBlend
280 (src: TglcBlendFactor.bfSrcAlpha; dst: TglcBlendFactor.bfOne), //bmAdditiveAlphaBlend
281 (src: TglcBlendFactor.bfOne; dst: TglcBlendFactor.bfOne)); //bmAdditiveBlend
283 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
284 procedure glcRenderFace(const aValue: TglcFace);
287 TglcFace.faBoth: begin
288 glDisable(GL_CULL_FACE);
290 TglcFace.faFront: begin
291 glEnable(GL_CULL_FACE);
294 TglcFace.faBack: begin
295 glEnable(GL_CULL_FACE);
296 glCullFace(GL_FRONT);
301 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
302 procedure glcDepthFunc(const aValue: TglcDepthFunc);
304 glDepthFunc(GLenum(aValue));
307 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
308 procedure glcBlendFunc(const aSource, aDest: TglcBlendFactor);
310 glBlendFunc(GLenum(aSource), GLenum(aDest));
313 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
314 procedure glcBlendFunc(const aMode: TglcBlendMode); overload;
316 glBlendFunc(GLenum(BLEND_MODE_VALUES[aMode].src), GLenum(BLEND_MODE_VALUES[aMode].dst));
319 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
320 procedure glcCheckAndRaiseError;
325 if (e <> GL_NO_ERROR) then
326 raise EOpenGL.Create(e);
330 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
331 procedure glcPolygonMode(const aFace: TglcFace; const aValue: TglcPolygonMode);
333 glPolygonMode(GLenum(aFace), GLenum(aValue));
337 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
338 //EOpenGL///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
339 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
340 constructor EOpenGL.Create(const aErrorCode: GLenum);
342 fErrorCode := aErrorCode;
344 inherited Create(gluErrorString(fErrorCode));
346 inherited Create('OpenGL Error: ' + IntToHex(fErrorCode, 8));
350 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
351 constructor EOpenGL.Create(const aMsg: String; const aErrorCode: GLenum);
353 fErrorCode := aErrorCode;
355 inherited Create(aMsg + ': ' + gluErrorString(fErrorCode))
357 inherited Create(aMsg + ': ' + IntToHex(fErrorCode, 8));