123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #include <tchar.h>
- #pragma hdrstop
- #include "Unit1.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma link "GLS.BaseClasses"
- #pragma link "GLS.Cadencer"
- #pragma link "GLS.Coordinates"
- #pragma link "GLS.GeomObjects"
- #pragma link "GLS.HUDObjects"
- #pragma link "GLS.Objects"
- #pragma link "GLS.Scene"
- #pragma link "GLS.SceneViewer"
- #pragma resource "*.dfm"
- TForm1 *Form1;
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent* Owner)
- : TForm(Owner)
- {
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormCreate(TObject *Sender)
- {
- Frames = 5;
- HUD->Material->FrontProperties->Diffuse->Alpha = 1.0 - (float)1.00/Frames;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLSceneViewerPostRender(TObject *Sender)
- {
- // render is done, we transfer it to our hud plane so it can be used
- // in the next frame
- GLSceneViewer->Buffer->CopyToTexture(HUD->Material->Texture);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormResize(TObject *Sender)
- {
- int w, h;
- // Here we resize our texture and plane to follow window dimension changes
- // Note that we have to stick to power of two texture dimensions if we don't
- // want performance to drop dramatically, this implies we can waste 3/4
- // of our texture memory... (f.i. a 513x513 window will require and use
- // a 1024x1024 texture)
- w = RoundUpToPowerOf2(GLSceneViewer->Width);
- h = RoundUpToPowerOf2(GLSceneViewer->Height);
- HUD->Material->Texture->DestroyHandles();
- /*
- HUD->Material->Texture->Image->Width = w;
- HUD->Material->Texture->Image->Height = h;
- */
- HUD->Position->X = w*0.5;
- HUD->Position->Y = GLSceneViewer->Height - h*0.5;
- HUD->Width = w;
- HUD->Height = h;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLCadencer1Progress(TObject *Sender, const double deltaTime,
- const double newTime)
- {
- // make things move
- Cube->TurnAngle = newTime*90;
- DummyCube->PitchAngle = newTime*60;
- Dodecahedron->RollAngle = newTime*15;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
- {
- // turn on/off VSync, this has an obvious impact on framerate,
- // which in turns impacts the motion blur look
- if ((IsKeyDown('s') || IsKeyDown('S'))
- || (IsKeyDown('v') || IsKeyDown('V')))
- if (GLSceneViewer->VSync == vsmNoSync)
- GLSceneViewer->VSync = vsmSync;
- else
- GLSceneViewer->VSync = vsmNoSync;
- // change the number of motion blur frames, and adjust
- // the transparency of the plane accordingly
- if (Key == VK_UP) Frames++;
- if ((Key == VK_DOWN) && (Frames>0)) Frames--;
- if (Frames == 0)
- HUD->Visible = false;
- else
- {
- HUD->Visible = true;
- HUD->Material->FrontProperties->Diffuse->Alpha = 1 - (float)1/(1+Frames);
- }
- }
- // standard issue camera movement
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLSceneViewerMouseDown(TObject *Sender, TMouseButton Button,
- TShiftState Shift, int X, int Y)
- {
- mx = X; my = Y;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLSceneViewerMouseMove(TObject *Sender, TShiftState Shift,
- int X, int Y)
- {
- if (Shift.Contains(ssLeft))
- Camera->MoveAroundTarget(my-Y, mx-X);
- mx = X; my = Y;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Timer1Timer(TObject *Sender)
- {
- // const String cVSync[vsmSync][vsmNoSync] = {"VSync ON", "VSync OFF"};
- Panel1->Caption = Format("Motion Blur on %d Frames %f FPS",
- ARRAYOFCONST ((Frames, GLSceneViewer->FramesPerSecond())));
- GLSceneViewer->ResetPerformanceMonitor();
- }
- //---------------------------------------------------------------------------
|