X-Git-Url: https://git.delphigl.com/?p=LazOpenGLCore.git;a=blobdiff_plain;f=uglcFrameBufferObject.pas;fp=uglcFrameBufferObject.pas;h=a0d75e05c444cdf86acfd1a6be1cfc9964c99663;hp=b08fba3e9b0fce16c105f10dbd20f6a6ac55be48;hb=38723f45320eea73e5fef416fc989bcfb9adf21d;hpb=eb7858e40852c3a1a61cead35c20f432d062184c diff --git a/uglcFrameBufferObject.pas b/uglcFrameBufferObject.pas index b08fba3..a0d75e0 100644 --- a/uglcFrameBufferObject.pas +++ b/uglcFrameBufferObject.pas @@ -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;