Browse Source

* pass TextureData as Argument in Constructor

master
Bergmann89 10 years ago
parent
commit
a6c7400293
1 changed files with 35 additions and 18 deletions
  1. +35
    -18
      glBitmap.pas

+ 35
- 18
glBitmap.pas View File

@@ -924,6 +924,7 @@ type
fTarget: GLuint;
fAnisotropic: Integer;
fDeleteTextureOnFree: Boolean;
fFreeDataOnDestroy: Boolean;
fFreeDataAfterGenTexture: Boolean;
fData: PByte;
fIsResident: Boolean;
@@ -966,6 +967,7 @@ type
procedure SetCustomData(const aValue: Pointer);
procedure SetCustomName(const aValue: String);
procedure SetCustomNameW(const aValue: WideString);
procedure SetFreeDataOnDestroy(const aValue: Boolean);
procedure SetDeleteTextureOnFree(const aValue: Boolean);
procedure SetFormat(const aValue: TglBitmapFormat);
procedure SetFreeDataAfterGenTexture(const aValue: Boolean);
@@ -1004,6 +1006,7 @@ type
property CustomData: Pointer read fCustomData write SetCustomData;

property DeleteTextureOnFree: Boolean read fDeleteTextureOnFree write SetDeleteTextureOnFree;
property FreeDataOnDestroy: Boolean read fFreeDataOnDestroy write SetFreeDataOnDestroy;
property FreeDataAfterGenTexture: Boolean read fFreeDataAfterGenTexture write SetFreeDataAfterGenTexture;

property Dimension: TglBitmapPixelPosition read fDimension;
@@ -1104,7 +1107,7 @@ type
constructor Create; overload;
constructor Create(const aFileName: String); overload;
constructor Create(const aStream: TStream); overload;
constructor Create(const aSize: TglBitmapPixelPosition; const aFormat: TglBitmapFormat); overload;
constructor Create(const aSize: TglBitmapPixelPosition; const aFormat: TglBitmapFormat; aData: PByte = nil); overload;
constructor Create(const aSize: TglBitmapPixelPosition; const aFormat: TglBitmapFormat; const aFunc: TglBitmapFunction; const aArgs: Pointer = nil); overload;
constructor Create(const aInstance: Cardinal; const aResource: String; const aResType: PChar = nil); overload;
constructor Create(const aInstance: Cardinal; const aResourceID: Integer; const aResType: PChar); overload;
@@ -4175,6 +4178,14 @@ begin
fCustomNameW := aValue;
end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TglBitmap.SetFreeDataOnDestroy(const aValue: Boolean);
begin
if fFreeDataOnDestroy = aValue then
exit;
fFreeDataOnDestroy := aValue;
end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TglBitmap.SetDeleteTextureOnFree(const aValue: Boolean);
begin
@@ -4335,7 +4346,6 @@ begin
fTarget := 0;
fIsResident := false;

fFormat := glBitmapGetDefaultFormat;
fMipMap := glBitmapDefaultMipmap;
fFreeDataAfterGenTexture := glBitmapGetDefaultFreeDataAfterGenTexture;
fDeleteTextureOnFree := glBitmapGetDefaultDeleteTextureOnFree;
@@ -4350,8 +4360,10 @@ procedure TglBitmap.BeforeDestruction;
var
NewData: PByte;
begin
NewData := nil;
SetDataPointer(NewData, tfEmpty); //be careful, Data could be freed by this method
if fFreeDataOnDestroy then begin
NewData := nil;
SetDataPointer(NewData, tfEmpty); //be careful, Data could be freed by this method
end;
if (fID > 0) and fDeleteTextureOnFree then
glDeleteTextures(1, @fID);
inherited BeforeDestruction;
@@ -4418,7 +4430,7 @@ begin
FreeMem(tmpData);
raise;
end;
AddFunc(Self, aFunc, false, Format, aArgs);
AddFunc(Self, aFunc, false, aFormat, aArgs);
end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -5624,6 +5636,8 @@ begin
glbReadOpenGLExtensions;
{$ENDIF}
inherited Create;
fFormat := glBitmapGetDefaultFormat;
fFreeDataOnDestroy := true;
end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -5641,27 +5655,30 @@ begin
end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
constructor TglBitmap.Create(const aSize: TglBitmapPixelPosition; const aFormat: TglBitmapFormat);
constructor TglBitmap.Create(const aSize: TglBitmapPixelPosition; const aFormat: TglBitmapFormat; aData: PByte);
var
Image: PByte;
ImageSize: Integer;
begin
Create;
ImageSize := TFormatDescriptor.Get(aFormat).GetSize(aSize);
GetMem(Image, ImageSize);
try
FillChar(Image^, ImageSize, #$FF);
SetDataPointer(Image, aFormat, aSize.X, aSize.Y); //be careful, Data could be freed by this method
except
if Assigned(Image) then
FreeMem(Image);
raise;
if not Assigned(aData) then begin
ImageSize := TFormatDescriptor.Get(aFormat).GetSize(aSize);
GetMem(aData, ImageSize);
try
FillChar(aData^, ImageSize, #$FF);
SetDataPointer(aData, aFormat, aSize.X, aSize.Y); //be careful, Data could be freed by this method
except
if Assigned(aData) then
FreeMem(aData);
raise;
end;
end else begin
SetDataPointer(aData, aFormat, aSize.X, aSize.Y); //be careful, Data could be freed by this method
fFreeDataOnDestroy := false;
end;
end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
constructor TglBitmap.Create(const aSize: TglBitmapPixelPosition; const aFormat: TglBitmapFormat;
const aFunc: TglBitmapFunction; const aArgs: Pointer);
constructor TglBitmap.Create(const aSize: TglBitmapPixelPosition; const aFormat: TglBitmapFormat; const aFunc: TglBitmapFunction; const aArgs: Pointer);
begin
Create;
LoadFromFunc(aSize, aFunc, aFormat, aArgs);


Loading…
Cancel
Save