212 lines
5.6 KiB
ObjectPascal
212 lines
5.6 KiB
ObjectPascal
unit umain;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
|
|
StdCtrls, ExtCtrls, utest, EpikTimer;
|
|
|
|
type
|
|
|
|
{ TFMain }
|
|
|
|
TFMain = class(TForm)
|
|
Button_First: TButton;
|
|
Button_Last: TButton;
|
|
Button_Next: TButton;
|
|
Button_Prev: TButton;
|
|
Label_TestName: TLabel;
|
|
Panel1: TPanel;
|
|
Timer1: TTimer;
|
|
procedure Button_LastClick(Sender: TObject);
|
|
procedure Button_NextClick(Sender: TObject);
|
|
procedure Button_FirstClick(Sender: TObject);
|
|
procedure Button_PrevClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure FormPaint(Sender: TObject);
|
|
procedure Timer1Timer(Sender: TObject);
|
|
public
|
|
NumTest: integer;
|
|
CurrentTest: TTest;
|
|
stopwatch, timeMeasure: TEpikTimer;
|
|
procedure SetNumTest(value: integer);
|
|
end;
|
|
|
|
var
|
|
FMain: TFMain;
|
|
|
|
implementation
|
|
|
|
uses utest1, utest2, utest3, utest4, utest5, utest6, utest7,
|
|
utest8, utest9, utest10, utest11, utest14, utest15, utest16, utest17,
|
|
utest18, utest19, utest22, utest23, utest24, utest25, utest26,
|
|
utest27, utest31, utest32, utest33, BGRAScene3D,
|
|
BGRABitmapTypes, LCLIntf, BGRAText;
|
|
|
|
const
|
|
TestCount = 33;
|
|
|
|
{ TFMain }
|
|
|
|
procedure TFMain.SetNumTest(value: integer);
|
|
begin
|
|
FreeAndNil(CurrentTest);
|
|
numTest := value;
|
|
Button_Prev.Enabled := TestCount >=2;
|
|
Button_Next.Enabled := TestCount >=2;
|
|
case numTest of
|
|
1: currentTest := TTest1.Create;
|
|
2: currentTest := TTest2.Create;
|
|
3: currentTest := TTest3.Create;
|
|
4: currentTest := TTest4.Create;
|
|
5: currentTest := TTest5.Create;
|
|
6: currentTest := TTest6.Create;
|
|
7: currentTest := TTest7.create;
|
|
8: currentTest := TTest8.create;
|
|
9: currentTest := TTest9.create;
|
|
10: currentTest := TTest10.create;
|
|
11: currentTest := TTest11.create('');
|
|
12: currentTest := TTest11.create('Emboss');
|
|
13: currentTest := TTest11.create('Contour');
|
|
14: currentTest := TTest14.create;
|
|
15: currentTest := TTest15.create;
|
|
16: currentTest := TTest16.create;
|
|
17: currentTest := TTest17.create;
|
|
18: currentTest := TTest18.create;
|
|
19: currentTest := TTest19.create(False,False);
|
|
20: currentTest := TTest19.create(True,False);
|
|
21: currentTest := TTest19.create(True,True);
|
|
22: currentTest := TTest22.create;
|
|
23: currentTest := TTest23.create;
|
|
24: currentTest := TTest24.create;
|
|
25: currentTest := TTest25.create;
|
|
26: currentTest := TTest26.create;
|
|
27: currentTest := TTest27.create(lnFace, liLowQuality);
|
|
28: currentTest := TTest27.create(lnFaceVertexMix, liLowQuality);
|
|
29: currentTest := TTest27.create(lnVertex, liLowQuality);
|
|
30: currentTest := TTest27.create(lnVertex, liAlwaysHighQuality);
|
|
31: currentTest := TTest31.create;
|
|
32: currentTest := TTest32.create;
|
|
33: currentTest := TTest33.create;
|
|
else
|
|
raise exception.Create('Test number unknown ('+IntToStr(numTest)+')');
|
|
end;
|
|
Label_TestName.Caption := 'Test n°'+inttostr(Value)+': '+currentTest.Name;
|
|
end;
|
|
|
|
procedure TFMain.FormCreate(Sender: TObject);
|
|
begin
|
|
CurrentTest := nil;
|
|
{$IFDEF DARWIN}
|
|
ResourceDir := ExtractFilePath(Application.ExeName)+'../../../../'+'img'+pathdelim;
|
|
If not FileExists(ResourceDir+'pac_d1.bmp') then
|
|
{$ENDIF}
|
|
ResourceDir:= ExtractFilePath(Application.ExeName)+'..'+pathdelim+'img'+pathdelim;
|
|
|
|
SetNumTest(1);
|
|
stopwatch := TEpikTimer.Create(Application);
|
|
timeMeasure := TEpikTimer.Create(Application);
|
|
timeMeasure.Start;
|
|
|
|
if TBGRAPixel_RGBAOrder then
|
|
Caption := Caption + ' (RGBA 32-bit)'
|
|
else
|
|
Caption := Caption + ' (BGRA 32-bit)';
|
|
end;
|
|
|
|
procedure TFMain.FormDestroy(Sender: TObject);
|
|
begin
|
|
FreeAndNil(CurrentTest);
|
|
end;
|
|
|
|
procedure TFMain.FormPaint(Sender: TObject);
|
|
var
|
|
strTime: string;
|
|
ptText: TPoint;
|
|
drawElapsed: extended;
|
|
begin
|
|
if CurrentTest <> nil then
|
|
begin
|
|
stopwatch.clear;
|
|
stopwatch.Start;
|
|
|
|
CurrentTest.OnPaint(self.Canvas,0,Panel1.Height,ClientWidth,ClientHeight-Panel1.Height);
|
|
|
|
drawElapsed := stopwatch.Elapsed;
|
|
|
|
if drawElapsed > 0.0001 then
|
|
begin
|
|
strTime := IntToStr(round(drawElapsed*1000))+ ' ms';
|
|
strTime += ', ' + IntToStr(round(1/drawElapsed)) + ' FPS';
|
|
ptText := Point(3,ClientHeight-25);
|
|
with self.Canvas do
|
|
begin
|
|
Font.Height := FixLCLFontFullHeight(Font.Name,25);
|
|
Font.Style := [fsBold];
|
|
Brush.Style := bsClear;
|
|
Font.Color := clBlack;
|
|
TextOut(ptText.X-1,ptText.Y-1,strTime);
|
|
TextOut(ptText.X+1,ptText.Y-1,strTime);
|
|
TextOut(ptText.X+1,ptText.Y+1,strTime);
|
|
TextOut(ptText.X-1,ptText.Y+1,strTime);
|
|
Font.Color := clWhite;
|
|
TextOut(ptText.X,ptText.Y,strTime);
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
end;
|
|
|
|
procedure TFMain.Timer1Timer(Sender: TObject);
|
|
var
|
|
elapsed: Extended;
|
|
r: TRect;
|
|
begin
|
|
if CurrentTest <> nil then
|
|
begin
|
|
Timer1.Enabled := false;
|
|
elapsed := timeMeasure.Elapsed;
|
|
timeMeasure.clear;
|
|
timeMeasure.Start;
|
|
|
|
CurrentTest.OnTimer(ClientWidth,ClientHeight-Panel1.Height,elapsed);
|
|
r := rect(0,Panel1.Height,ClientWidth,ClientHeight);
|
|
InvalidateRect(self.Handle,@r,False);
|
|
self.Update;
|
|
Timer1.Enabled := true;
|
|
end;
|
|
end;
|
|
|
|
procedure TFMain.Button_NextClick(Sender: TObject);
|
|
begin
|
|
if NumTest < TestCount then
|
|
SetNumTest(NumTest+1) else
|
|
SetNumTest(1);
|
|
end;
|
|
|
|
procedure TFMain.Button_LastClick(Sender: TObject);
|
|
begin
|
|
SetNumTest(TestCount);
|
|
end;
|
|
|
|
procedure TFMain.Button_FirstClick(Sender: TObject);
|
|
begin
|
|
SetNumTest(1);
|
|
end;
|
|
|
|
procedure TFMain.Button_PrevClick(Sender: TObject);
|
|
begin
|
|
if NumTest > 1 then
|
|
SetNumTest(NumTest-1) else
|
|
SetNumTest(TestCount);
|
|
end;
|
|
|
|
initialization
|
|
{$I umain.lrs}
|
|
|
|
end.
|
|
|