X-Git-Url: https://git.delphigl.com/?a=blobdiff_plain;f=glBitmap.pas;h=b1b4c65417bfb803c53838222c924bd9eb7c17f7;hb=HEAD;hp=1e804e05e0ba1b8f37f25ca9b02670d38493417a;hpb=c110c2d190cfdd632a622163d3edb7c9c90cf21a;p=glBitmap.git diff --git a/glBitmap.pas b/glBitmap.pas index 1e804e0..165ee38 100644 --- a/glBitmap.pas +++ b/glBitmap.pas @@ -179,8 +179,6 @@ unit glBitmap; {$OPTIMIZATION ON} {$ENDIF} -{$UNDEF GLB_LAZARUS} - interface uses @@ -390,6 +388,10 @@ type { @return @true if the format is a grayscale format, @false otherwise } function GetIsGrayscale: Boolean; + + { @return @true if the format is supported by OpenGL, @false otherwise } + function GetHasOpenGLSupport: Boolean; + protected fFormat: TglBitmapFormat; //< format this descriptor belongs to fWithAlpha: TglBitmapFormat; //< suitable format with alpha channel @@ -442,6 +444,8 @@ type property HasColor: Boolean read GetHasColor; //< @true if the format has any color color channel, @false otherwise property IsGrayscale: Boolean read GetIsGrayscale; //< @true if the format is a grayscale format, @false otherwise + property HasOpenGLSupport: Boolean read GetHasOpenGLSupport; //< @true if the format is supported by OpenGL, @false otherwise + function GetSize(const aSize: TglBitmapSize): Integer; overload; virtual; function GetSize(const aWidth, aHeight: Integer): Integer; overload; virtual; @@ -1059,11 +1063,11 @@ type public { bind texture @param aEnableTextureUnit enable texture unit for this texture (e.g. glEnable(GL_TEXTURE_2D)) } - procedure Bind(const aEnableTextureUnit: Boolean = true); virtual; + procedure Bind({$IFNDEF OPENGL_ES}const aEnableTextureUnit: Boolean = true{$ENDIF}); virtual; { bind texture @param aDisableTextureUnit disable texture unit for this texture (e.g. glEnable(GL_TEXTURE_2D)) } - procedure Unbind(const aDisableTextureUnit: Boolean = true); virtual; + procedure Unbind({$IFNDEF OPENGL_ES}const aDisableTextureUnit: Boolean = true{$ENDIF}); virtual; { upload texture data from given data object to video card @param aData texture data object that contains the actual data @@ -1176,12 +1180,12 @@ type { bind texture @param aEnableTexCoordsGen enable cube map generator @param aEnableTextureUnit enable texture unit } - procedure Bind({$IFNDEF OPENGL_ES}const aEnableTexCoordsGen: Boolean = true;{$ENDIF} const aEnableTextureUnit: Boolean = true); reintroduce; virtual; + procedure Bind({$IFNDEF OPENGL_ES}const aEnableTexCoordsGen: Boolean = true; const aEnableTextureUnit: Boolean = true{$ENDIF}); reintroduce; virtual; { unbind texture @param aDisableTexCoordsGen disable cube map generator @param aDisableTextureUnit disable texture unit } - procedure Unbind({$IFNDEF OPENGL_ES}const aDisableTexCoordsGen: Boolean = true;{$ENDIF} const aDisableTextureUnit: Boolean = true); reintroduce; virtual; + procedure Unbind({$IFNDEF OPENGL_ES}const aDisableTexCoordsGen: Boolean = true; const aDisableTextureUnit: Boolean = true{$ENDIF}); reintroduce; virtual; end; {$IFEND} @@ -3837,6 +3841,11 @@ begin result := (Mask.r = Mask.g) and (Mask.g = Mask.b) and (Mask.r > 0); end; +function TglBitmapFormatDescriptor.GetHasOpenGLSupport: Boolean; +begin + result := (OpenGLFormat = Format); +end; + procedure TglBitmapFormatDescriptor.SetValues; begin fFormat := tfEmpty; @@ -8101,7 +8110,7 @@ begin {$IF NOT DEFINED(OPENGL_ES) OR DEFINED(OPENGL_ES_EXT)} if GL_EXT_texture_filter_anisotropic then begin if fAnisotropic > 0 then begin - Bind(false); + Bind({$IFNDEF OPENGL_ES}false{$ENDIF}); glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, @MaxAnisotropic); if aValue > MaxAnisotropic then fAnisotropic := MaxAnisotropic; @@ -8122,7 +8131,7 @@ begin if (ID <> 0) then glDeleteTextures(1, @fID); glGenTextures(1, @fID); - Bind(false); + Bind({$IFNDEF OPENGL_ES}false{$ENDIF}); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -8144,14 +8153,14 @@ begin aBuildWithGlu := false; if (MipMap = mmMipmap) then begin if (GL_VERSION_1_4 or GL_SGIS_generate_mipmap) then - glTexParameteri(Target, GL_GENERATE_MIPMAP, GL_TRUE) + glTexParameteri(Target, GL_GENERATE_MIPMAP, GLint(GL_TRUE)) else aBuildWithGlu := true; end else if (MipMap = mmMipmapGlu) then aBuildWithGlu := true; {$ELSE} if (MipMap = mmMipmap) then - glTexParameteri(Target, GL_GENERATE_MIPMAP, GL_TRUE); + glGenerateMipmap(Target); {$ENDIF} end; @@ -8234,7 +8243,7 @@ begin //apply filter if (ID > 0) then begin - Bind(false); + Bind({$IFNDEF OPENGL_ES}false{$ENDIF}); glTexParameteri(Target, GL_TEXTURE_MAG_FILTER, fFilterMag); if (MipMap = mmNone) {$IFNDEF OPENGL_ES}or (Target = GL_TEXTURE_RECTANGLE){$ENDIF} then begin @@ -8306,7 +8315,7 @@ begin CheckAndSetWrap(R, fWrapR); if (ID > 0) then begin - Bind(false); + Bind({$IFNDEF OPENGL_ES}false{$ENDIF}); glTexParameteri(Target, GL_TEXTURE_WRAP_S, fWrapS); glTexParameteri(Target, GL_TEXTURE_WRAP_T, fWrapT); {$IF NOT DEFINED(OPENGL_ES) OR DEFINED(OPENGL_ES_3_0)} @@ -8357,19 +8366,23 @@ end; {$IFEND} ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -procedure TglBitmap.Bind(const aEnableTextureUnit: Boolean); +procedure TglBitmap.Bind({$IFNDEF OPENGL_ES}const aEnableTextureUnit: Boolean{$ENDIF}); begin +{$IFNDEF OPENGL_ES} if aEnableTextureUnit then glEnable(Target); +{$ENDIF} if (ID > 0) then glBindTexture(Target, ID); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -procedure TglBitmap.Unbind(const aDisableTextureUnit: Boolean); +procedure TglBitmap.Unbind({$IFNDEF OPENGL_ES}const aDisableTextureUnit: Boolean{$ENDIF}); begin +{$IFNDEF OPENGL_ES} if aDisableTextureUnit then glDisable(Target); +{$ENDIF} glBindTexture(Target, 0); end; @@ -8510,7 +8523,7 @@ end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TglBitmap2D///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -procedure TglBitmap2D.UploadDataIntern(const aDataObj: TglBitmapData; const aTarget: GLenum; const aBuildWithGlu: Boolean); +procedure TglBitmap2D.UploadDataIntern(const aDataObj: TglBitmapData; const aTarget: GLenum{$IFNDEF OPENGL_ES}; const aBuildWithGlu: Boolean{$ENDIF}); var fd: TglBitmapFormatDescriptor; begin @@ -8675,9 +8688,9 @@ begin end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -procedure TglBitmapCubeMap.Bind({$IFNDEF OPENGL_ES}const aEnableTexCoordsGen: Boolean;{$ENDIF} const aEnableTextureUnit: Boolean); +procedure TglBitmapCubeMap.Bind({$IFNDEF OPENGL_ES}const aEnableTexCoordsGen: Boolean; const aEnableTextureUnit: Boolean{$ENDIF}); begin - inherited Bind (aEnableTextureUnit); + inherited Bind({$IFNDEF OPENGL_ES}aEnableTextureUnit{$ENDIF}); {$IFNDEF OPENGL_ES} if aEnableTexCoordsGen then begin glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, fGenMode); @@ -8691,9 +8704,9 @@ begin end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -procedure TglBitmapCubeMap.Unbind({$IFNDEF OPENGL_ES}const aDisableTexCoordsGen: Boolean;{$ENDIF} const aDisableTextureUnit: Boolean); +procedure TglBitmapCubeMap.Unbind({$IFNDEF OPENGL_ES}const aDisableTexCoordsGen: Boolean; const aDisableTextureUnit: Boolean{$ENDIF}); begin - inherited Unbind(aDisableTextureUnit); + inherited Unbind({$IFNDEF OPENGL_ES}aDisableTextureUnit{$ENDIF}); {$IFNDEF OPENGL_ES} if aDisableTexCoordsGen then begin glDisable(GL_TEXTURE_GEN_S);