interface
uses
- Classes, SysUtils, fgl, dglOpenGl, uglcTypes;
+ Classes, SysUtils, fgl, {$IFNDEF OPENGL_ES}dglOpenGl{$ELSE}dglOpenGLES{$ENDIF}, uglcTypes;
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);
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);
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:
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;
var
buff: array of GLenum;
+{$IFNDEF OPENGL_ES}
b: GLboolean;
+{$ENDIF}
i: Integer;
begin
if (fBuffers.Count = 0) then
//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;
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;
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;