{$OPTIMIZATION ON}
{$ENDIF}
-{$UNDEF GLB_LAZARUS}
-
interface
uses
tfARGB4us1, //< 1 x unsigned short (4bit alpha, 4bit red, 4bit green, 4bit blue)
tfRGB5A1us1, //< 1 x unsigned short (5bit red, 5bit green, 5bit blue, 1bit alpha)
tfA1RGB5us1, //< 1 x unsigned short (1bit alpha, 5bit red, 5bit green, 5bit blue)
+ tfRGBA8ub4, //< 1 x unsigned byte (red), 1 x unsigned byte (green), 1 x unsigned byte (blue), 1 x unsigned byte (alpha)
tfRGBA8ui1, //< 1 x unsigned int (8bit red, 8bit green, 8bit blue, 8 bit alpha)
tfARGB8ui1, //< 1 x unsigned int (8 bit alpha, 8bit red, 8bit green, 8bit blue)
- tfRGBA8ub4, //< 1 x unsigned byte (red), 1 x unsigned byte (green), 1 x unsigned byte (blue), 1 x unsigned byte (alpha)
tfRGB10A2ui1, //< 1 x unsigned int (10bit red, 10bit green, 10bit blue, 2bit alpha)
tfA2RGB10ui1, //< 1 x unsigned int (2bit alpha, 10bit red, 10bit green, 10bit blue)
tfRGBA16us4, //< 1 x unsigned short (red), 1 x unsigned short (green), 1 x unsigned short (blue), 1 x unsigned short (alpha)
tfABGR4us1, //< 1 x unsigned short (4bit alpha, 4bit blue, 4bit green, 4bit red)
tfBGR5A1us1, //< 1 x unsigned short (5bit blue, 5bit green, 5bit red, 1bit alpha)
tfA1BGR5us1, //< 1 x unsigned short (1bit alpha, 5bit blue, 5bit green, 5bit red)
+ tfBGRA8ub4, //< 1 x unsigned byte (blue), 1 x unsigned byte (green), 1 x unsigned byte (red), 1 x unsigned byte (alpha)
tfBGRA8ui1, //< 1 x unsigned int (8bit blue, 8bit green, 8bit red, 8bit alpha)
tfABGR8ui1, //< 1 x unsigned int (8bit alpha, 8bit blue, 8bit green, 8bit red)
- tfBGRA8ub4, //< 1 x unsigned byte (blue), 1 x unsigned byte (green), 1 x unsigned byte (red), 1 x unsigned byte (alpha)
tfBGR10A2ui1, //< 1 x unsigned int (10bit blue, 10bit green, 10bit red, 2bit alpha)
tfA2BGR10ui1, //< 1 x unsigned int (2bit alpha, 10bit blue, 10bit green, 10bit red)
tfBGRA16us4, //< 1 x unsigned short (blue), 1 x unsigned short (green), 1 x unsigned short (red), 1 x unsigned short (alpha)
{ get the format descriptor by a given OpenGL internal format
@param aInternalFormat OpenGL internal format to get format descriptor for
@returns suitable format descriptor or tfEmpty-Descriptor }
- class function GetByFormat(const aInternalFormat: GLenum): TglBitmapFormatDescriptor;
+ class function GetByFormat(const aInternalFormat: GLenum): TglBitmapFormatDescriptor; overload;
+
+ { get the format descriptor by the given format
+ @param aFormat format to get descriptor for
+ @return suitable format descriptor or tfEmpty-Descriptor }
+ class function GetByFormat(const aFormat: TglBitmapFormat): TglBitmapFormatDescriptor; overload;
end;
////////////////////////////////////////////////////////////////////////////////////////////////////
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
{ 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}
TfdARGB4us1,
TfdRGB5A1us1,
TfdA1RGB5us1,
+ TfdRGBA8ub4,
TfdRGBA8ui1,
TfdARGB8ui1,
- TfdRGBA8ub4,
TfdRGB10A2ui1,
TfdA2RGB10ui1,
TfdRGBA16us4,
TfdABGR4us1,
TfdBGR5A1us1,
TfdA1BGR5us1,
+ TfdBGRA8ub4,
TfdBGRA8ui1,
TfdABGR8ui1,
- TfdBGRA8ub4,
TfdBGR10A2ui1,
TfdA2BGR10ui1,
TfdBGRA16us4,
fPrecision := glBitmapRec4ub( 4, 4, 4, 4);
fShift := glBitmapRec4ub(12, 8, 4, 0);
fglFormat := GL_RGBA;
- fglInternalFormat := {$IF NOT DEFINED(OPENGL_ES) OR DEFINED(OPENGL_ES_3_0)}GL_RGBA8{$ELSE}GL_RGBA{$IFEND};
+ fglInternalFormat := {$IF NOT DEFINED(OPENGL_ES) OR DEFINED(OPENGL_ES_3_0)}GL_RGBA4{$ELSE}GL_RGBA{$IFEND};
fglDataFormat := GL_UNSIGNED_SHORT_4_4_4_4;
end;
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+class function TglBitmapFormatDescriptor.GetByFormat(const aFormat: TglBitmapFormat): TglBitmapFormatDescriptor;
+begin
+ result := TFormatDescriptor.Get(aFormat);
+ if not Assigned(result) then
+ result := TFormatDescriptor.Get(tfEmpty);
+end;
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//TFormatDescriptor///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class procedure TFormatDescriptor.Init;
{$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;
if (ID <> 0) then
glDeleteTextures(1, @fID);
glGenTextures(1, @fID);
- Bind(false);
+ Bind({$IFNDEF OPENGL_ES}false{$ENDIF});
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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;
//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
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)}
{$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;
FormatDesc := TFormatDescriptor.Get(IntFormat);
GetMem(Temp, FormatDesc.GetSize(TempWidth, TempHeight));
try
+ glPixelStorei(GL_PACK_ALIGNMENT, 1);
if FormatDesc.IsCompressed then begin
if not Assigned(glGetCompressedTexImage) then
raise EglBitmap.Create('compressed formats not supported by video adapter');
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//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
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);
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);