property glFormat: GLenum read GetglFormat;
property glInternalFormat: GLenum read GetglInternalFormat;
property glDataFormat: GLenum read GetglDataFormat;
+ public
+ class function GetByFormat(const aInternalFormat: GLenum): TglBitmapFormatDescriptor;
end;
////////////////////////////////////////////////////////////////////////////////////////////////////
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//TglBitmapFormatDescriptor///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+class function TglBitmapFormatDescriptor.GetByFormat(const aInternalFormat: GLenum): TglBitmapFormatDescriptor;
+var
+ f: TglBitmapFormat;
+begin
+ for f := Low(TglBitmapFormat) to High(TglBitmapFormat) do begin
+ result := TFormatDescriptor.Get(f);
+ if (result.glInternalFormat = aInternalFormat) then
+ exit;
+ end;
+ result := TFormatDescriptor.Get(tfEmpty);
+end;
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//TFormatDescriptor///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class procedure TFormatDescriptor.Init;
bfFormat: TbmpBitfieldFormat;
pSourceLine, pDestLine: PByte;
pSourceMD, pDestMD: Pointer;
- x, y: Cardinal;
+ x, y: Integer;
pixel: TglBitmapPixelData;
begin
bfFormat := TbmpBitfieldFormat.Create;
pDestMD := FormatDesc.CreateMappingData;
try
for y := 0 to aImage.Height-1 do begin
- pSourceLine := aImage.PixelData + y * aImage.DataDescription.BytesPerLine;
+ pSourceLine := aImage.PixelData + y {%H-}* aImage.DataDescription.BytesPerLine;
pDestLine := ImageData + y * Round(FormatDesc.PixelSize * aImage.Width);
for x := 0 to aImage.Width-1 do begin
bfFormat.Unmap(pSourceLine, pixel, pSourceMD);
TempPtr: PByte;
Size: Integer;
begin
+ result := nil;
Temp := (ClassType.Create as TglBitmap);
try
// copy texture data if assigned
procedure TglBitmap2D.GetDataFromTexture;
var
Temp: PByte;
- TempWidth, TempHeight: GLint;
- TempIntFormat: GLenum;
- IntFormat, f: TglBitmapFormat;
+ TempWidth, TempHeight: Integer;
+ TempIntFormat: GLint;
+ IntFormat: TglBitmapFormat;
FormatDesc: TFormatDescriptor;
begin
Bind;
// Request Data
glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_WIDTH, @TempWidth);
glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_HEIGHT, @TempHeight);
- glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_INTERNAL_FORMAT, PGLint(@TempIntFormat));
+ glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_INTERNAL_FORMAT, @TempIntFormat);
- IntFormat := tfEmpty;
- for f := Low(TglBitmapFormat) to High(TglBitmapFormat) do begin
- FormatDesc := TFormatDescriptor.Get(f);
- if (FormatDesc.glInternalFormat = TempIntFormat) then begin
- IntFormat := FormatDesc.Format;
- break;
- end;
- end;
+ IntFormat := tfEmpty;
+ FormatDesc := (TglBitmapFormatDescriptor.GetByFormat(TempIntFormat) as TFormatDescriptor);
+ IntFormat := FormatDesc.Format;
// Getting data from OpenGL
FormatDesc := TFormatDescriptor.Get(IntFormat);