* improved speed; reduced memory usage of the interference bitmap

This commit is contained in:
florian 2003-10-19 12:36:36 +00:00
parent 136a47429e
commit 13a4e41b0c

View File

@ -125,18 +125,20 @@ unit rgobj;
layer 1 - 256*256 blocks with pointers to layer 2 blocks layer 1 - 256*256 blocks with pointers to layer 2 blocks
layer 2 - blocks of 32*256 (32 bytes = 256 bits) layer 2 - blocks of 32*256 (32 bytes = 256 bits)
} }
Tinterferencebitmap2=array[byte] of set of byte; Tinterferencebitmap2 = array[byte] of set of byte;
Pinterferencebitmap2=^Tinterferencebitmap2; Pinterferencebitmap2 = ^Tinterferencebitmap2;
Tinterferencebitmap1=array[byte,byte] of Pinterferencebitmap2; Tinterferencebitmap1 = array[byte] of Pinterferencebitmap2;
pinterferencebitmap1 = ^tinterferencebitmap1;
Tinterferencebitmap=class Tinterferencebitmap=class
private private
maxx1, maxx1,
maxy1 : byte; maxy1 : byte;
fbitmap : Tinterferencebitmap1; fbitmap : pinterferencebitmap1;
function getbitmap(x,y:tsuperregister):boolean; function getbitmap(x,y:tsuperregister):boolean;
procedure setbitmap(x,y:tsuperregister;b:boolean); procedure setbitmap(x,y:tsuperregister;b:boolean);
public public
constructor create;
destructor destroy;override; destructor destroy;override;
property bitmap[x,y:tsuperregister]:boolean read getbitmap write setbitmap;default; property bitmap[x,y:tsuperregister]:boolean read getbitmap write setbitmap;default;
end; end;
@ -457,21 +459,40 @@ implementation
tinterferencebitmap tinterferencebitmap
******************************************************************************} ******************************************************************************}
constructor tinterferencebitmap.create;
begin
inherited create;
maxx1:=1;
getmem(fbitmap,sizeof(tinterferencebitmap1)*2);
fillchar(fbitmap^,sizeof(tinterferencebitmap1)*2,0);
end;
destructor tinterferencebitmap.destroy; destructor tinterferencebitmap.destroy;
var var
i,j : byte; i,j : byte;
begin begin
for i:=0 to maxx1 do if assigned(fbitmap) then
for j:=0 to maxy1 do begin
if assigned(fbitmap[i,j]) then for i:=0 to maxx1 do
dispose(fbitmap[i,j]); for j:=0 to maxy1 do
if assigned(fbitmap[i,j]) then
dispose(fbitmap[i,j]);
freemem(fbitmap);
end;
end; end;
function tinterferencebitmap.getbitmap(x,y:tsuperregister):boolean; function tinterferencebitmap.getbitmap(x,y:tsuperregister):boolean;
var
page : pinterferencebitmap2;
begin begin
result:=assigned(fbitmap[x shr 8,y shr 8]) and result:=false;
((x and $ff) in fbitmap[x shr 8,y shr 8]^[y and $ff]); if (x shr 8>maxx1) then
exit;
page:=fbitmap[x shr 8,y shr 8];
result:=assigned(page) and
((x and $ff) in page^[y and $ff]);
end; end;
@ -481,10 +502,14 @@ implementation
begin begin
x1:=x shr 8; x1:=x shr 8;
y1:=y shr 8; y1:=y shr 8;
if x1>maxx1 then
begin
reallocmem(fbitmap,sizeof(tinterferencebitmap1)*(x1+1));
fillchar(fbitmap[maxx1+1],sizeof(tinterferencebitmap1)*(x1-maxx1),0);
maxx1:=x1;
end;
if not assigned(fbitmap[x1,y1]) then if not assigned(fbitmap[x1,y1]) then
begin begin
if x1>maxx1 then
maxx1:=x1;
if y1>maxy1 then if y1>maxy1 then
maxy1:=y1; maxy1:=y1;
new(fbitmap[x1,y1]); new(fbitmap[x1,y1]);
@ -1771,7 +1796,10 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.89 2003-10-19 01:34:30 florian Revision 1.90 2003-10-19 12:36:36 florian
* improved speed; reduced memory usage of the interference bitmap
Revision 1.89 2003/10/19 01:34:30 florian
* some ppc stuff fixed * some ppc stuff fixed
* memory leak fixed * memory leak fixed