@@ -82,7 +82,7 @@ unit uglcArrayBuffer; | |||
interface | |||
uses | |||
dglOpenGL, sysutils, uglcTypes; | |||
{$IFNDEF OPENGL_ES}dglOpenGL{$ELSE}dglOpenGLES{$ENDIF}, sysutils, uglcTypes; | |||
type | |||
EglcArrayBuffer = class(Exception); | |||
@@ -103,6 +103,7 @@ type | |||
procedure BufferData(const aDataCount, aDataSize: Cardinal; const aUsage: TglcBufferUsage; const aData: Pointer); | |||
function MapBuffer(const aAccess: TglcBufferAccess): Pointer; | |||
function MapBufferRange(const aOffset: GLintptr; const aSize: GLsizeiptr; const aAccess: TglcBufferAccess): Pointer; | |||
procedure UnmapBuffer; | |||
procedure Bind; | |||
procedure Unbind; | |||
@@ -133,14 +134,40 @@ begin | |||
result := nil; | |||
if (fDataCount * fDataSize) <= 0 then | |||
exit; | |||
{$IFNDEF OPENGL_ES} | |||
result := glMapBuffer(GLenum(fTarget), GLenum(aAccess)); | |||
{$ELSE} | |||
if not GL_OES_mapbuffer then | |||
raise EglcArrayBuffer.Create('map buffer is not supported by video card'); | |||
result := glMapBufferOES(GLenum(fTarget), GLenum(aAccess)); | |||
{$ENDIF} | |||
glcCheckAndRaiseError; | |||
end; | |||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[c] | |||
function TglcArrayBuffer.MapBufferRange(const aOffset: GLintptr; const aSize: GLsizeiptr; const aAccess: TglcBufferAccess): Pointer; | |||
begin | |||
{$IFNDEF OPENGL_ES} | |||
if not (GL_ARB_map_buffer_range or GL_VERSION_3_0) then | |||
raise EglcArrayBuffer.Create('map buffer range is not supported by video card'); | |||
result := glMapBufferRange(GLenum(fTarget), aOffset, aSize, GLenum(aAccess)); | |||
{$ELSE} | |||
if not GL_VERSION_3_0 then | |||
raise EglcArrayBuffer.Create('map buffer range is not supported by video card'); | |||
result := glMapBufferRange(GLenum(fTarget), aOffset, aSize, GLenum(aAccess)); | |||
{$ENDIF} | |||
end; | |||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[c] | |||
procedure TglcArrayBuffer.UnmapBuffer; | |||
begin | |||
{$IFNDEF OPENGL_ES} | |||
glUnmapBuffer(GLenum(fTarget)); | |||
{$ELSE} | |||
if not (GL_OES_mapbuffer or GL_VERSION_3_0) then | |||
raise EglcArrayBuffer.Create('unmap buffer is not supported by video card'); | |||
glUnmapBuffer(GLenum(fTarget)); | |||
{$ENDIF} | |||
end; | |||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[c] | |||
@@ -158,13 +185,19 @@ end; | |||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[c] | |||
constructor TglcArrayBuffer.Create(const aTarget: TglcBufferTarget); | |||
begin | |||
if not GL_ARB_Vertex_Buffer_Object then | |||
{$IFNDEF OPENGL_ES} | |||
if not (GL_ARB_Vertex_Buffer_Object or GL_VERSION_2_0) then | |||
raise EglcArrayBuffer.Create('Create - VertexBuffer: not supported'); | |||
{$ELSE} | |||
if not GL_VERSION_2_0 then | |||
raise EglcArrayBuffer.Create('Create - VertexBuffer: not supported'); | |||
{$ENDIF} | |||
inherited Create; | |||
glGenBuffers(1, @fID); | |||
fDataCount := 0; | |||
fDataSize := 0; | |||
fTarget := aTarget; | |||
glcCheckAndRaiseError; | |||
end; | |||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[c] | |||
@@ -1320,11 +1320,16 @@ type | |||
{$IFEND} | |||
TglcBitmapFormat = TglBitmapFormat; | |||
TglcBitmap1D = TglBitmap1D; | |||
TglcBitmap2D = TglBitmap2D; | |||
{$IF NOT DEFINED(OPENGL_ES)} | |||
TglcBitmap1D = TglBitmap1D; | |||
TglcBitmapCubeMap = TglBitmapCubeMap; | |||
TglcBitmapNormalMap = TglBitmapNormalMap; | |||
{$ELSEIF DEFINED(OPENGL_ES_2_0)} | |||
TglcBitmapCubeMap = TglBitmapCubeMap; | |||
TglcBitmapNormalMap = TglBitmapNormalMap; | |||
{$IFEND} | |||
const | |||
NULL_SIZE: TglBitmapPixelPosition = (Fields: []; X: 0; Y: 0); | |||
@@ -57,7 +57,9 @@ type | |||
procedure Perspective(const aFOVAngle, aAspectRatio, aNear, aFar: Single); | |||
procedure Ortho(const aLeft, aRight, aBottom, aTop, aNear, aFar: Single); | |||
procedure Activate; | |||
{$IFNDEF OPENGL_ES} | |||
procedure Render; | |||
{$ENDIF} | |||
constructor Create; | |||
end; | |||
@@ -82,7 +84,7 @@ type | |||
implementation | |||
uses | |||
Math, dglOpenGL; | |||
Math, {$IFNDEF OPENGL_ES}dglOpenGL{$ELSE}dglOpenGLES{$ENDIF}; | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
//TglcFrustum/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
@@ -152,13 +154,14 @@ begin | |||
glMatrixMode(GL_PROJECTION); | |||
glLoadIdentity; | |||
if fIsOrthogonal then | |||
glOrtho(fLeft, fRight, fBottom, fTop, fNear, fFar) | |||
{$IFNDEF OPENGL_ES}glOrtho{$ELSE}glOrthof{$ENDIF}(fLeft, fRight, fBottom, fTop, fNear, fFar) | |||
else | |||
glFrustum(fLeft, fRight, fBottom, fTop, fNear, fFar); | |||
{$IFNDEF OPENGL_ES}glFrustum{$ELSE}glFrustumf{$ENDIF}(fLeft, fRight, fBottom, fTop, fNear, fFar); | |||
glMatrixMode(GL_MODELVIEW); | |||
end; | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
{$IFNDEF OPENGL_ES} | |||
procedure TglcFrustum.Render; | |||
var | |||
min, max: TgluVector2f; | |||
@@ -189,6 +192,7 @@ begin | |||
glVertex3f(0, 0, 0); glVertex3f(max[0], min[0], -fFar); | |||
glEnd; | |||
end; | |||
{$ENDIF} | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
constructor TglcFrustum.Create; | |||
@@ -39,7 +39,7 @@ unit uglcFrameBufferObject; | |||
interface | |||
uses | |||
Classes, SysUtils, fgl, dglOpenGl, uglcTypes; | |||
Classes, SysUtils, fgl, {$IFNDEF OPENGL_ES}dglOpenGl{$ELSE}dglOpenGLES{$ENDIF}, uglcTypes; | |||
type | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
@@ -126,6 +126,9 @@ type | |||
fWidth: Integer; | |||
fHeight: Integer; | |||
fBuffers: TglcAttachmentContainerList; | |||
{$IFDEF OPENGL_ES} | |||
fOldViewport: array[0..3] of GLint; | |||
{$ENDIF} | |||
function GetBuffer(const aIndex: Integer): TglcBuffer; | |||
procedure SetBuffer(const aIndex: Integer; const aValue: TglcBuffer); | |||
@@ -322,8 +325,8 @@ begin | |||
glGenTextures(1, @fID); | |||
Bind(false); | |||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); | |||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); | |||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, {$IFNDEF OPENGL_ES}GL_CLAMP{$ELSE}GL_CLAMP_TO_EDGE{$ENDIF}); | |||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, {$IFNDEF OPENGL_ES}GL_CLAMP{$ELSE}GL_CLAMP_TO_EDGE{$ENDIF}); | |||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | |||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | |||
Unbind(false); | |||
@@ -466,6 +469,7 @@ begin | |||
raise EglcFrameBufferObject.Create('Incomplete attachment'); | |||
GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: | |||
raise EglcFrameBufferObject.Create('Missing attachment'); | |||
{$IFNDEF OPENGL_ES} | |||
GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: | |||
raise EglcFrameBufferObject.Create('Incomplete dimensions'); | |||
GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: | |||
@@ -474,6 +478,7 @@ begin | |||
raise EglcFrameBufferObject.Create('Incomplete draw buffer'); | |||
GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: | |||
raise EglcFrameBufferObject.Create('Incomplete read buffer'); | |||
{$ENDIF} | |||
GL_FRAMEBUFFER_UNSUPPORTED: | |||
raise EglcFrameBufferObject.Create('Framebufferobjects unsupported'); | |||
end; | |||
@@ -490,7 +495,9 @@ procedure TglcFrameBufferObject.UpdateAndCheckFBO; | |||
var | |||
buff: array of GLenum; | |||
{$IFNDEF OPENGL_ES} | |||
b: GLboolean; | |||
{$ENDIF} | |||
i: Integer; | |||
begin | |||
if (fBuffers.Count = 0) then | |||
@@ -508,14 +515,24 @@ begin | |||
//set Read and Draw Buffer | |||
if (Length(buff) = 0) then begin | |||
glReadBuffer(GL_NONE); | |||
{$IFNDEF OPENGL_ES} | |||
glDrawBuffer(GL_NONE); | |||
{$ELSE} | |||
SetLength(buff, 1); | |||
buff[0] := GL_NONE; | |||
glDrawBuffers(1, @buff[0]); | |||
{$ENDIF} | |||
end else begin | |||
glDrawBuffers(Length(buff), @buff[0]); | |||
{$IFNDEF OPENGL_ES} | |||
glGetBooleanv(GL_DOUBLEBUFFER, @b); | |||
if b then | |||
glReadBuffer(GL_BACK) | |||
else | |||
glReadBuffer(GL_FRONT); | |||
{$ELSE} | |||
glReadBuffer(GL_FRONT); | |||
{$ENDIF} | |||
end; | |||
Unbind(false); | |||
end; | |||
@@ -612,7 +629,11 @@ procedure TglcFrameBufferObject.Bind(const aSetViewport: Boolean = true); | |||
begin | |||
glBindFramebuffer(GL_FRAMEBUFFER, fID); | |||
if aSetViewport then begin | |||
{$IFNDEF OPENGL_ES} | |||
glPushAttrib(GL_VIEWPORT_BIT); | |||
{$ELSE} | |||
glGetIntegerv(GL_VIEWPORT, @fOldViewport[0]); | |||
{$ENDIF} | |||
glViewPort(0, 0, fWidth, fHeight); | |||
end; | |||
end; | |||
@@ -622,7 +643,11 @@ end; | |||
procedure TglcFrameBufferObject.Unbind(const aResetViewport: Boolean = true); | |||
begin | |||
if aResetViewport then | |||
{$IFNDEF OPENGL_ES} | |||
glPopAttrib; | |||
{$ELSE} | |||
glViewport(fOldViewport[0], fOldViewport[1], fOldViewport[2], fOldViewport[3]); | |||
{$ENDIF} | |||
glBindFramebuffer(GL_FRAMEBUFFER, 0); | |||
end; | |||
@@ -9,7 +9,7 @@ unit uglcLight; | |||
interface | |||
uses | |||
Classes, SysUtils, dglOpenGL, ugluVector, uglcTypes; | |||
Classes, SysUtils, {$IFNDEF OPENGL_ES}dglOpenGl{$ELSE}dglOpenGLES{$ENDIF}, ugluVector, uglcTypes; | |||
type | |||
TglcMaterialRec = packed record | |||
@@ -57,7 +57,7 @@ unit uglcShader; | |||
interface | |||
uses | |||
Classes, SysUtils, fgl, dglOpenGL, uglcTypes, ugluMatrix, uglcContext; | |||
Classes, SysUtils, fgl, {$IFNDEF OPENGL_ES}dglOpenGl{$ELSE}dglOpenGLES{$ENDIF}, uglcTypes, ugluMatrix; | |||
type | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
@@ -67,19 +67,19 @@ type | |||
TglcShaderObject = class(TObject) | |||
private | |||
fAtachedTo: TglcShaderProgram; | |||
fShaderObj: GLHandle; | |||
fShaderObj: GLuint; | |||
fShaderType: TglcShaderType; | |||
fCode: String; | |||
fOnLog: TglcShaderLogEvent; | |||
fAttachedTo: TglcShaderProgram; | |||
function GetInfoLog(aObj: GLHandle): String; | |||
function GetInfoLog(aObj: GLuint): String; | |||
function GetCompiled: Boolean; | |||
procedure Log(const aMsg: String); | |||
procedure CreateShaderObj; | |||
procedure AttachTo(const aProgram: TglcShaderProgram); | |||
public | |||
property ShaderObj : GLHandle read fShaderObj; | |||
property ShaderObj: GLuint read fShaderObj; | |||
property ShaderType: TglcShaderType read fShaderType; | |||
property Compiled: Boolean read GetCompiled; | |||
property AtachedTo: TglcShaderProgram read fAtachedTo; | |||
@@ -96,12 +96,12 @@ type | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
TglcShaderProgram = class(TglcShaderObjectList) | |||
private | |||
fProgramObj: GLHandle; | |||
fProgramObj: GLuint; | |||
fOnLog: TglcShaderLogEvent; | |||
fFilename: String; | |||
function GetUniformLocation(const aName: String; out aPos: glInt): Boolean; | |||
function GetInfoLog(Obj: GLHandle): String; | |||
function GetInfoLog(Obj: GLuint): String; | |||
function GetCompiled: Boolean; | |||
function GetLinked: Boolean; | |||
@@ -109,7 +109,7 @@ type | |||
procedure Log(const msg: String); | |||
procedure AttachShaderObj(const aShaderObj: TglcShaderObject); | |||
public | |||
property ProgramObj: glHandle read fProgramObj; | |||
property ProgramObj: GLuint read fProgramObj; | |||
property Filename: String read fFilename; | |||
property Compiled: Boolean read GetCompiled; | |||
property Linked: Boolean read GetLinked; | |||
@@ -172,7 +172,7 @@ const | |||
//ließt das Log eines OpenGL-Objekts aus | |||
//@Obj: Handle des Objekts, dessen Log ausgelesen werden soll; | |||
//@result: Log des Objekts; | |||
function TglcShaderObject.GetInfoLog(aObj: GLHandle): String; | |||
function TglcShaderObject.GetInfoLog(aObj: GLuint): String; | |||
var | |||
Msg: PChar; | |||
bLen: GLint; | |||
@@ -293,7 +293,7 @@ end; | |||
//ließt das Log eines OpenGL-Objekts aus | |||
//@Obj: Handle des Objekts, dessen Log ausgelesen werden soll; | |||
//@result: Log des Objekts; | |||
function TglcShaderProgram.GetInfoLog(Obj: GLHandle): String; | |||
function TglcShaderProgram.GetInfoLog(Obj: GLuint): String; | |||
var | |||
Msg: PChar; | |||
bLen: GLint; | |||
@@ -336,12 +336,6 @@ end; | |||
procedure TglcShaderProgram.CreateProgramObj; | |||
begin | |||
if (fProgramObj = 0) then begin | |||
if GL_LibHandle = nil then | |||
raise EglcShader.Create('TglShaderProgram.Create - OpenGL not initialized'); | |||
if not TglcContext.IsAnyContextActive then | |||
raise EglcShader.Create('TglShaderProgram.Create - no valid render context'); | |||
fProgramObj := glCreateProgram(); | |||
Log('shader program created: #'+IntToHex(fProgramObj, 4)); | |||
end; | |||
@@ -815,12 +809,14 @@ procedure TglcShaderProgram.LoadFromStream(const aStream: TStream); | |||
result := TglcShaderType.stVertex | |||
else if (aStr = 'GL_FRAGMENT_SHADER') then | |||
result := TglcShaderType.stFragment | |||
{$IFNDEF OPENGL_ES} | |||
else if (aStr = 'GL_GEOMETRY_SHADER') then | |||
result := TglcShaderType.stGeometry | |||
else if (aStr = 'GL_TESS_CONTROL_SHADER') then | |||
result := TglcShaderType.stTessControl | |||
else if (aStr = 'GL_TESS_EVALUATION_SHADER') then | |||
result := TglcShaderType.stTessEvaluation | |||
{$ENDIF} | |||
else | |||
raise Exception.Create('invalid shader type: ' + aStr); | |||
end; | |||
@@ -924,9 +920,11 @@ var | |||
case aShaderType of | |||
TglcShaderType.stVertex: result := 'GL_VERTEX_SHADER'; | |||
TglcShaderType.stFragment: result := 'GL_FRAGMENT_SHADER'; | |||
{$IFNDEF OPENGL_ES} | |||
TglcShaderType.stGeometry: result := 'GL_GEOMETRY_SHADER'; | |||
TglcShaderType.stTessControl: result := 'GL_TESS_CONTROL_SHADER'; | |||
TglcShaderType.stTessEvaluation: result := 'GL_TESS_EVALUATION_SHADER'; | |||
{$ENDIF} | |||
else | |||
result := 'UNKNOWN'; | |||
end; | |||
@@ -972,4 +970,4 @@ begin | |||
end; | |||
end. | |||
@@ -12,7 +12,7 @@ unit uglcTypes; | |||
interface | |||
uses | |||
dglOpenGL, sysutils; | |||
{$IFNDEF OPENGL_ES}dglOpenGL{$ELSE}dglOpenGLES{$ENDIF}, sysutils; | |||
type | |||
TglcFace = ( | |||
@@ -20,10 +20,12 @@ type | |||
faBack = GL_BACK, | |||
faBoth = GL_FRONT_AND_BACK); | |||
{$IFNDEF OPENGL_ES} | |||
TglcPolygonMode = ( | |||
pmPoint = GL_POINT, | |||
pmLine = GL_LINE, | |||
pmFill = GL_FILL); | |||
{$ENDIF} | |||
TglcDepthFunc = ( | |||
dfNever = GL_NEVER, | |||
@@ -37,7 +39,9 @@ type | |||
TglcClearBuffer = ( | |||
cbDepthBuffer = GL_DEPTH_BUFFER_BIT, | |||
{$IFNDEF OPENGL_ES} | |||
cbAccumBuffer = GL_ACCUM_BUFFER_BIT, | |||
{$ENDIF} | |||
cbStencilBuffer = GL_STENCIL_BUFFER_BIT, | |||
cbColorBuffer = GL_COLOR_BUFFER_BIT); | |||
@@ -54,9 +58,13 @@ type | |||
mfLinear = GL_LINEAR); | |||
TglcTextureWrap = ( | |||
{$IFNDEF OPENGL_ES} | |||
twClamp = GL_CLAMP, | |||
{$ENDIF} | |||
twRepeat = GL_REPEAT, | |||
{$IFNDEF OPENGL_ES} | |||
twClampToBorder = GL_CLAMP_TO_BORDER, | |||
{$ENDIF} | |||
twClampToEdge = GL_CLAMP_TO_EDGE, | |||
twMirroredRepeat = GL_MIRRORED_REPEAT); | |||
@@ -85,7 +93,9 @@ type | |||
TglcFormat = ( | |||
fmUnknown = 0, | |||
{$IFNDEF OPENGL_ES} | |||
fmColorIndex = GL_COLOR_INDEX, | |||
{$ENDIF} | |||
fmDepthComponent = GL_DEPTH_COMPONENT, | |||
fmRed = GL_RED, | |||
fmGreen = GL_GREEN, | |||
@@ -95,8 +105,10 @@ type | |||
fmRGBA = GL_RGBA, | |||
fmLuminance = GL_LUMINANCE, | |||
fmLuminanceAlpha = GL_LUMINANCE_ALPHA, | |||
{$IFNDEF OPENGL_ES} | |||
fmBGR = GL_BGR, | |||
fmBGRA = GL_BGRA, | |||
{$ENDIF} | |||
fmDepthStencil = GL_DEPTH_STENCIL); | |||
TglcInternalFormat = ( | |||
@@ -107,6 +119,7 @@ type | |||
ifRGBA = GL_RGBA, | |||
ifLuminance = GL_LUMINANCE, | |||
ifLuminanceAlpha = GL_LUMINANCE_ALPHA, | |||
{$IFNDEF OPENGL_ES} | |||
ifR3G3B2 = GL_R3_G3_B2, | |||
ifAlpha4 = GL_ALPHA4, | |||
ifAlpha8 = GL_ALPHA8, | |||
@@ -129,19 +142,25 @@ type | |||
ifIntensity16 = GL_INTENSITY16, | |||
ifRGB4 = GL_RGB4, | |||
ifRGB5 = GL_RGB5, | |||
{$ENDIF} | |||
ifRGB8 = GL_RGB8, | |||
{$IFNDEF OPENGL_ES} | |||
ifRGB10 = GL_RGB10, | |||
ifRGB12 = GL_RGB12, | |||
ifRGB16 = GL_RGB16, | |||
ifRGBA2 = GL_RGBA2, | |||
{$ENDIF} | |||
ifRGBA4 = GL_RGBA4, | |||
ifRGB5A1 = GL_RGB5_A1, | |||
ifRGBA8 = GL_RGBA8, | |||
ifRGB10A2 = GL_RGB10_A2, | |||
{$IFNDEF OPENGL_ES} | |||
ifRGBA12 = GL_RGBA12, | |||
ifRGBA16 = GL_RGBA16, | |||
{$ENDIF} | |||
ifDepthComponent16 = GL_DEPTH_COMPONENT16, | |||
ifDepthComponent24 = GL_DEPTH_COMPONENT24, | |||
{$IFNDEF OPENGL_ES} | |||
ifDepthComponent32 = GL_DEPTH_COMPONENT32, | |||
ifCompressedAlpha = GL_COMPRESSED_ALPHA, | |||
ifCompressedLuminance = GL_COMPRESSED_LUMINANCE, | |||
@@ -149,6 +168,7 @@ type | |||
ifCompressedIntensity = GL_COMPRESSED_INTENSITY, | |||
ifCompressedRGB = GL_COMPRESSED_RGB, | |||
ifCompressedRGBA = GL_COMPRESSED_RGBA, | |||
{$ENDIF} | |||
ifRGBA32f = GL_RGBA32F, | |||
ifRGB32f = GL_RGB32F, | |||
ifRGBA16F = GL_RGBA16F, | |||
@@ -156,17 +176,26 @@ type | |||
ifDepth24Stencil8 = GL_DEPTH24_STENCIL8, | |||
ifSRGB = GL_SRGB, | |||
ifSRGB8 = GL_SRGB8, | |||
{$IFNDEF OPENGL_ES} | |||
ifSRGBA = GL_SRGB_ALPHA, | |||
{$ENDIF} | |||
ifSRGBA8 = GL_SRGB8_ALPHA8, | |||
{$IFNDEF OPENGL_ES} | |||
ifSLuminanceAlpha = GL_SLUMINANCE_ALPHA, | |||
ifSLuminance8Alpha8 = GL_SLUMINANCE8_ALPHA8, | |||
ifSLuminance = GL_SLUMINANCE, | |||
ifSLuminance8 = GL_SLUMINANCE8, | |||
{$ENDIF} | |||
ifDepth32fStencil8 = GL_DEPTH32F_STENCIL8, | |||
{$IFNDEF OPENGL_ES} | |||
ifStencil1 = GL_STENCIL_INDEX1, | |||
ifStencil4 = GL_STENCIL_INDEX4, | |||
ifStencil8 = GL_STENCIL_INDEX8, | |||
ifStencil16 = GL_STENCIL_INDEX16); | |||
{$ENDIF} | |||
ifStencil8 = GL_STENCIL_INDEX8 | |||
{$IFNDEF OPENGL_ES} | |||
, ifStencil16 = GL_STENCIL_INDEX16 | |||
{$ENDIF} | |||
); | |||
TglcAttachment = ( | |||
atDepthStencil = GL_DEPTH_STENCIL_ATTACHMENT, | |||
@@ -191,10 +220,13 @@ type | |||
TglcShaderType = ( | |||
stFragment = GL_FRAGMENT_SHADER, | |||
stVertex = GL_VERTEX_SHADER, | |||
stGeometry = GL_GEOMETRY_SHADER, | |||
stTessEvaluation = GL_TESS_EVALUATION_SHADER, | |||
stTessControl = GL_TESS_CONTROL_SHADER); | |||
stVertex = GL_VERTEX_SHADER | |||
{$IFNDEF OPENGL_ES} | |||
, stGeometry = GL_GEOMETRY_SHADER | |||
, stTessEvaluation = GL_TESS_EVALUATION_SHADER | |||
, stTessControl = GL_TESS_CONTROL_SHADER | |||
{$ENDIF} | |||
); | |||
TglcBufferTarget = ( | |||
btArrayBuffer = GL_ARRAY_BUFFER, | |||
@@ -226,11 +258,13 @@ type | |||
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; | |||
{$IFNDEF OPENGL_ES} | |||
procedure glcPolygonMode(const aFace: TglcFace; const aValue: TglcPolygonMode); inline; | |||
{$ENDIF} | |||
implementation | |||
@@ -264,12 +298,6 @@ begin | |||
end; | |||
end; | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure glcPolygonMode(const aFace: TglcFace; const aValue: TglcPolygonMode); | |||
begin | |||
glPolygonMode(GLenum(aFace), GLenum(aValue)); | |||
end; | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure glcDepthFunc(const aValue: TglcDepthFunc); | |||
begin | |||
@@ -298,20 +326,36 @@ begin | |||
raise EOpenGL.Create(e); | |||
end; | |||
{$IFNDEF OPENGL_ES} | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
procedure glcPolygonMode(const aFace: TglcFace; const aValue: TglcPolygonMode); | |||
begin | |||
glPolygonMode(GLenum(aFace), GLenum(aValue)); | |||
end; | |||
{$ENDIF} | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
//EOpenGL/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
constructor EOpenGL.Create(const aErrorCode: GLenum); | |||
begin | |||
fErrorCode := aErrorCode; | |||
{$IFNDEF OPENGL_ES} | |||
inherited Create(gluErrorString(fErrorCode)); | |||
{$ELSE} | |||
inherited Create('OpenGL Error: ' + IntToHex(fErrorCode, 8)); | |||
{$ENDIF} | |||
end; | |||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
constructor EOpenGL.Create(const aMsg: String; const aErrorCode: GLenum); | |||
begin | |||
fErrorCode := aErrorCode; | |||
{$IFNDEF OPENGL_ES} | |||
inherited Create(aMsg + ': ' + gluErrorString(fErrorCode)) | |||
{$ELSE} | |||
inherited Create(aMsg + ': ' + IntToHex(fErrorCode, 8)); | |||
{$ENDIF} | |||
end; | |||
end. | |||
@@ -9,7 +9,7 @@ unit ugluVector; | |||
interface | |||
uses | |||
Classes, SysUtils, dglOpenGL; | |||
Classes, SysUtils, {$IFNDEF OPENGL_ES}dglOpenGL{$ELSE}dglOpenGLES{$ENDIF}; | |||
type | |||
//Vektortypen | |||
@@ -799,10 +799,10 @@ end; | |||
//@result: absolute Raumkoordianten des Vectors v; | |||
function gluGetAbsCoord(const v: TgluVector3f): TgluVector3f; | |||
var | |||
v4: TVector4f; | |||
v4: TgluVector4f; | |||
sum: Single; | |||
i, j: Integer; | |||
m: array[0..3, 0..3] of TGLFloat; | |||
m: array[0..3, 0..3] of GLfloat; | |||
begin | |||
for i := 0 to 2 do | |||
v4[i] := v[i]; | |||