125 lines
2.2 KiB
ObjectPascal
125 lines
2.2 KiB
ObjectPascal
program graphbench;
|
|
uses sprites;
|
|
|
|
var starttime,endtime:DateTime;
|
|
spriteData:SpritePixels;
|
|
|
|
procedure readSpriteData(filename:string);
|
|
var f:file;
|
|
begin
|
|
open(f,filename,ModeReadOnly);
|
|
seek(f,8); (* skip file header *)
|
|
read(f,spriteData);
|
|
close(f);
|
|
end;
|
|
|
|
procedure startBench(name:string);
|
|
begin
|
|
write(name:20, ' ');
|
|
starttime := GetTime;
|
|
end;
|
|
|
|
procedure endBench;
|
|
var secDelta, minDelta, hourDelta:integer;
|
|
procedure write2Digits(i:integer);
|
|
begin
|
|
if i < 10 then
|
|
write('0');
|
|
write(i);
|
|
end;
|
|
begin
|
|
endTime := GetTime;
|
|
|
|
hourDelta := endtime.hours - starttime.hours;
|
|
minDelta := endtime.minutes - starttime.minutes;
|
|
secDelta := endtime.seconds - starttime.seconds;
|
|
|
|
if secDelta < 0 then
|
|
begin
|
|
secDelta := 60 + secDelta;
|
|
minDelta := minDelta - 1;
|
|
end;
|
|
|
|
if minDelta < 0 then
|
|
begin
|
|
minDelta := 60 + minDelta;
|
|
hourDelta := hourDelta - 1;
|
|
end;
|
|
|
|
write2Digits(hourDelta);
|
|
write(':'); write2Digits(minDelta);
|
|
write(':'); write2Digits(secDelta);
|
|
writeln;
|
|
end;
|
|
|
|
function randint(lessthan:integer):integer;
|
|
var r:integer;
|
|
begin
|
|
r := random and 511;
|
|
if r >= lessthan then
|
|
r := r - lessthan;
|
|
randint := r;
|
|
end;
|
|
|
|
procedure drawsprites(count:integer);
|
|
var i,col,x,y:integer;
|
|
begin
|
|
col := 1;
|
|
for i := 1 to count do
|
|
begin
|
|
x := randint(350);
|
|
y := randint(350);
|
|
PutSprite(x,y,spriteData);
|
|
col := col + 1;
|
|
if col > 15 then col := 1;
|
|
end;
|
|
end;
|
|
|
|
procedure drawlines(count:integer);
|
|
var i,col,x1,y1,x2,y2:integer;
|
|
begin
|
|
col := 1;
|
|
for i := 1 to count do
|
|
begin
|
|
x1 := randint(500);
|
|
y1 := randint(400);
|
|
x2 := randint(500);
|
|
y2 := randint(400);
|
|
DrawLine(x1,y1,x2,y2,col);
|
|
col := col + 1;
|
|
if col > 15 then col := 1;
|
|
end;
|
|
end;
|
|
|
|
procedure drawpoints(count:integer);
|
|
var i,col,x,y:integer;
|
|
begin
|
|
col := 1;
|
|
for i := 1 to count do
|
|
begin
|
|
x := randint(500);
|
|
y := randint(400);
|
|
PutPixel(x,y,col);
|
|
col := col + 1;
|
|
if col > 15 then col := 1;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
readSpriteData('rocket.sprt');
|
|
|
|
InitGraphics;
|
|
startBench('points 200K');
|
|
drawpoints(200000);
|
|
endBench;
|
|
|
|
InitGraphics;
|
|
startBench('lines 10K');
|
|
drawlines(10000);
|
|
endBench;
|
|
|
|
InitGraphics;
|
|
startBench('sprites 50K');
|
|
drawsprites(50000);
|
|
endBench;
|
|
end.
|