Просмотр исходного кода

Included bpl/dcp dirs for cpp builder personality

GLScene 2 лет назад
Родитель
Сommit
8a4d31cca0
37 измененных файлов с 1921 добавлено и 280 удалено
  1. 0 0
      Assets/Button/DefaultSkin.bmp
  2. 24 0
      Assets/Script/saved_console_output.ini
  3. 1 0
      Assets/Script/saved_typed_commands.ini
  4. 1 0
      Bpl/#Win32.txt
  5. 1 0
      Bpl/Win64/#Win64.txt
  6. 1 0
      Dcp/#Win32.txt
  7. 1 0
      Dcp/Win64/#Win64.txt
  8. 15 11
      Examples/Demos/interface/Console/fConsoleC.cpp
  9. 59 119
      Examples/Demos/interface/Console/fConsoleD.dfm
  10. 4 1
      Examples/Demos/interface/Console/fConsoleD.pas
  11. 4 4
      Examples/Demos/interface/GuiPaint/fGuiPaintC.cpp
  12. 0 2
      Examples/Demos/interface/GuiPaint/fGuiPaintC.dfm
  13. 3 3
      Examples/Demos/interface/GuiPaint/fGuiPaintD.pas
  14. 5 5
      Examples/Demos/interface/Pick/fPickD.dfm
  15. 10 12
      Examples/Demos/interface/WinFont/fWinFontD.dfm
  16. 1 1
      Examples/Demos/interface/WinFont/fWinFontD.pas
  17. 1 0
      Examples/Demos/interface/bmpfont/fBmpfontC.cpp
  18. 1 0
      Examples/Demos/interface/bmpfont/fBmpfontC.dfm
  19. 23 30
      Examples/Demos/interface/camera/fCameraD.dfm
  20. 1 0
      Examples/Demos/interface/cursor/fCursorC.cpp
  21. 0 2
      Examples/Demos/interface/cursor/fCursorC.dfm
  22. 13 26
      Examples/Demos/interface/cursor/fCursorD.dfm
  23. 1 1
      Examples/Demos/interface/cursor/fCursorD.pas
  24. 8 12
      Examples/Demos/interface/fontcolor/fFontColorD.dfm
  25. 29 29
      Examples/Demos/movements/objmove/fObjmoveD.dfm
  26. 22 5
      Examples/Demos/movements/objmove/fObjmoveD.pas
  27. 19 0
      Examples/Demos/specialsFX/PFXCursor/PfxCursorD.dpr
  28. 1049 0
      Examples/Demos/specialsFX/PFXCursor/PfxCursorD.dproj
  29. 338 0
      Examples/Demos/specialsFX/PFXCursor/fPfxCursorD.dfm
  30. 181 0
      Examples/Demos/specialsFX/PFXCursor/fPfxCursorD.pas
  31. 10 10
      Examples/Demos/specialsFX/SpecialFX.groupproj
  32. 2 1
      Packages/_cleanpackages.cmd
  33. 2 1
      README.md
  34. 1 1
      Readme.txt
  35. 0 1
      Source/GLS.BumpmapHDS.pas
  36. 4 3
      _cleanforcpp.cmd
  37. 86 0
      _cleanfordelphi.cmd

+ 0 - 0
Assets/Skin/DefaultSkin.bmp → Assets/Button/DefaultSkin.bmp


+ 24 - 0
Assets/Script/saved_console_output.ini

@@ -0,0 +1,24 @@
+Console started
+help
+ - List of registered console commands:
+   - ? - displays help for a single command or all commands
+   - Help - displays help for a single command or all commands
+   - cls - clears screen
+   - Console.Hide - hides the console
+   - Console.Color - displays and allows to change the color of the console
+   - Console.Ren - renames any command
+   - Console.ClearTypedCommands - clears Typed Commands list
+   - System.Time - displays current system time
+   - System.Date - displays current system date
+   - Viewer.FPS - displays GLSceneViewer FPS
+   - Viewer.ResetPerformanceMonitor - resets GLSceneViewer FPS monitor
+   - Viewer.VSync - displays and allows to change GLSceneViewer VSync
+   - Viewer.AntiAliasing - displays and allows to change GLSceneViewer AntiAliasing
+   - hello - 
+   -  - Says hi to you too
+   -  - 
+   -  - 
+   -  - 
+ - List of additional console commands:
+   - echo
+   - exit

+ 1 - 0
Assets/Script/saved_typed_commands.ini

@@ -0,0 +1 @@
+help

+ 1 - 0
Bpl/#Win32.txt

@@ -0,0 +1 @@
+Win32 bpl packages

+ 1 - 0
Bpl/Win64/#Win64.txt

@@ -0,0 +1 @@
+Win64 bpl/rsm packages

+ 1 - 0
Dcp/#Win32.txt

@@ -0,0 +1 @@
+Win32 dcp packages

+ 1 - 0
Dcp/Win64/#Win64.txt

@@ -0,0 +1 @@
+Win64 dcp packages

+ 15 - 11
Examples/Demos/interface/Console/fConsoleC.cpp

@@ -33,7 +33,7 @@ __fastcall TForm1::TForm1(TComponent* Owner)
 void __fastcall TForm1::OnHelloCommand(const TGLConsoleCommand *ConsoleCommand,
 		  const TGLCustomConsole *Console, TGLUserInputCommand &Command)
 {
- /// Console->AddLine("Hi, dude!");    // yet not works!
+  Console->AddLine("Hi, dude!");
 }
 
 //---------------------------------------------------------------------------
@@ -50,7 +50,7 @@ void __fastcall TForm1::OnCommand(const TGLConsoleCommand *ConsoleCommand,
   {
 	for (i = 1; i< (Command.CommandCount - 1); i++)
 	  Str = Str + Command.Strings[i];
-///	Console->AddLine("You just typed: " + Str);
+	Console->AddLine("You just typed: " + Str);
 	Command.UnknownCommand = false;
   }
   else
@@ -61,9 +61,9 @@ void __fastcall TForm1::OnCommand(const TGLConsoleCommand *ConsoleCommand,
 									 // get used to puting this line in every
 									 // command you recognize :)
   }
-///  if (Command.UnknownCommand)
-///	GLConsole1->AddLine(" - Current supported external commands are: \r\
-///					 echo and exit!");
+  if (Command.UnknownCommand)
+	GLConsole1->AddLine(" - Current supported external commands are: \r\
+					 echo and exit!");
 }
 
 //---------------------------------------------------------------------------
@@ -77,6 +77,7 @@ void __fastcall TForm1::FormCreate(TObject *Sender)
 
   //optional stuff:
   TFileName Path = GetCurrentAssetPath();
+  SetCurrentDir(Path  + "\\texture");
   GLConsole1->HudSprite->Material->Texture->Image->LoadFromFile("GLScene.bmp");
   GLConsole1->AddLine("Console started");
   GLConsole1->HUDSpriteColor = clWhite;
@@ -84,17 +85,20 @@ void __fastcall TForm1::FormCreate(TObject *Sender)
 
   //two ways of processing commands:
 	 //1) manual
-///  GLConsole1->OnCommandIssued = OnCommand;
+   GLConsole1->OnCommandIssued = OnCommand;
 	 //2)using built-in objects (prefered)
-	GLConsole1->Commands->Add()->CommandName = "hello";
-	GLConsole1->Commands->Add()->ShortHelp = "Says hi to you too";
-	GLConsole1->Commands->Add()->LongHelp->Add("Well, the console really does say - Hi, dude - to you, because");
-	GLConsole1->Commands->Add()->LongHelp->Add("it is roude not to greet someone, when he says - hello - to you ;)");
-///	GLConsole1->Commands->Add()->OnCommand = OnHelloCommand;
+   GLConsole1->Commands->Add()->CommandName = "hello";
+   GLConsole1->Commands->Add()->ShortHelp = "Says hi to you too";
+   GLConsole1->Commands->Add()->LongHelp->Add("Well, the console really does say - Hi, dude - to you, because");
+   GLConsole1->Commands->Add()->LongHelp->Add("it is roude not to greet someone, when he says - hello - to you ;)");
+   GLConsole1->Commands->Add()->OnCommand = OnHelloCommand;
 
   //register additional commands to enable auto-completion function
   GLConsole1->AdditionalCommands->Add("echo");
   GLConsole1->AdditionalCommands->Add("exit");
+
+  // for console saved output and loading .ini files
+  SetCurrentDir(Path  + "\\script");
 }
 //---------------------------------------------------------------------------
 void __fastcall TForm1::GLCadencer1Progress(TObject *Sender, const double deltaTime,

+ 59 - 119
Examples/Demos/interface/Console/fConsoleD.dfm

@@ -2,12 +2,12 @@ object FormConsole: TFormConsole
   Left = 258
   Top = 155
   Caption = 'Console'
-  ClientHeight = 521
-  ClientWidth = 814
+  ClientHeight = 417
+  ClientWidth = 651
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
-  Font.Height = -14
+  Font.Height = -11
   Font.Name = 'MS Sans Serif'
   Font.Style = []
   KeyPreview = True
@@ -16,34 +16,25 @@ object FormConsole: TFormConsole
   OnKeyDown = FormKeyDown
   OnKeyPress = FormKeyPress
   OnResize = FormResize
-  PixelsPerInch = 120
-  TextHeight = 16
+  TextHeight = 13
   object Splitter1: TSplitter
-    Left = 261
+    Left = 209
     Top = 0
-    Width = 553
-    Height = 521
-    Margins.Left = 4
-    Margins.Top = 4
-    Margins.Right = 4
-    Margins.Bottom = 4
+    Width = 442
+    Height = 417
     Align = alClient
     Beveled = True
     MinSize = 40
   end
   object Viewer: TGLSceneViewer
-    Left = 261
+    Left = 209
     Top = 0
-    Width = 553
-    Height = 521
-    Margins.Left = 4
-    Margins.Top = 4
-    Margins.Right = 4
-    Margins.Bottom = 4
+    Width = 442
+    Height = 417
     Camera = GLCamera1
     Buffer.BackgroundColor = clMoneyGreen
     Buffer.AmbientColor.Color = {9A99993E9A99993E9A99993E0000803F}
-    FieldOfView = 158.269744873046900000
+    FieldOfView = 153.029327392578100000
     PenAsTouch = False
     Align = alClient
     OnMouseDown = ViewerMouseDown
@@ -52,69 +43,45 @@ object FormConsole: TFormConsole
   object Panel1: TPanel
     Left = 0
     Top = 0
-    Width = 261
-    Height = 521
-    Margins.Left = 4
-    Margins.Top = 4
-    Margins.Right = 4
-    Margins.Bottom = 4
+    Width = 209
+    Height = 417
     Align = alLeft
     Caption = 'Panel1'
     TabOrder = 1
     object Splitter2: TSplitter
       Left = 1
-      Top = 291
-      Width = 259
-      Height = 229
-      Margins.Left = 4
-      Margins.Top = 4
-      Margins.Right = 4
-      Margins.Bottom = 4
+      Top = 233
+      Width = 207
+      Height = 183
       Align = alClient
     end
     object GroupBox1: TGroupBox
       Left = 1
-      Top = 291
-      Width = 259
-      Height = 229
-      Margins.Left = 4
-      Margins.Top = 4
-      Margins.Right = 4
-      Margins.Bottom = 4
+      Top = 233
+      Width = 207
+      Height = 183
       Align = alClient
       Caption = 'Console options'
       TabOrder = 0
       object Label1: TLabel
-        Left = 76
-        Top = 99
-        Width = 115
-        Height = 16
-        Margins.Left = 4
-        Margins.Top = 4
-        Margins.Right = 4
-        Margins.Bottom = 4
+        Left = 61
+        Top = 79
+        Width = 88
+        Height = 13
         Caption = ' Typed Commands'
       end
       object Label2: TLabel
-        Left = 86
-        Top = 128
-        Width = 91
-        Height = 16
-        Margins.Left = 4
-        Margins.Top = 4
-        Margins.Right = 4
-        Margins.Bottom = 4
+        Left = 69
+        Top = 102
+        Width = 73
+        Height = 13
         Caption = 'Console Output'
       end
       object CheckBox1: TCheckBox
-        Left = 10
-        Top = 20
-        Width = 245
-        Height = 21
-        Margins.Left = 4
-        Margins.Top = 4
-        Margins.Right = 4
-        Margins.Bottom = 4
+        Left = 8
+        Top = 16
+        Width = 196
+        Height = 17
         TabStop = False
         Caption = 'AutoCompleteCommandsOnKeyPress'
         TabOrder = 0
@@ -123,14 +90,10 @@ object FormConsole: TFormConsole
         OnKeyPress = FormKeyPress
       end
       object CheckBox2: TCheckBox
-        Left = 10
-        Top = 40
-        Width = 241
-        Height = 21
-        Margins.Left = 4
-        Margins.Top = 4
-        Margins.Right = 4
-        Margins.Bottom = 4
+        Left = 8
+        Top = 32
+        Width = 193
+        Height = 17
         TabStop = False
         Caption = 'AutoCompleteCommandsOnEnter'
         TabOrder = 1
@@ -139,14 +102,10 @@ object FormConsole: TFormConsole
         OnKeyPress = FormKeyPress
       end
       object CheckBox3: TCheckBox
-        Left = 10
-        Top = 60
-        Width = 244
-        Height = 21
-        Margins.Left = 4
-        Margins.Top = 4
-        Margins.Right = 4
-        Margins.Bottom = 4
+        Left = 8
+        Top = 48
+        Width = 195
+        Height = 17
         TabStop = False
         Caption = 'ShowConsoleHelpIfUnknownCommand'
         TabOrder = 2
@@ -155,14 +114,10 @@ object FormConsole: TFormConsole
         OnKeyPress = FormKeyPress
       end
       object Button1: TButton
-        Left = 10
-        Top = 90
-        Width = 55
-        Height = 31
-        Margins.Left = 4
-        Margins.Top = 4
-        Margins.Right = 4
-        Margins.Bottom = 4
+        Left = 8
+        Top = 72
+        Width = 44
+        Height = 25
         Caption = 'Save'
         TabOrder = 3
         TabStop = False
@@ -171,14 +126,10 @@ object FormConsole: TFormConsole
         OnKeyPress = FormKeyPress
       end
       object Button2: TButton
-        Left = 10
-        Top = 120
-        Width = 55
-        Height = 31
-        Margins.Left = 4
-        Margins.Top = 4
-        Margins.Right = 4
-        Margins.Bottom = 4
+        Left = 8
+        Top = 96
+        Width = 44
+        Height = 25
         Caption = 'Save'
         TabOrder = 4
         TabStop = False
@@ -187,28 +138,20 @@ object FormConsole: TFormConsole
         OnKeyPress = FormKeyPress
       end
       object Button6: TButton
-        Left = 194
-        Top = 89
-        Width = 55
-        Height = 31
-        Margins.Left = 4
-        Margins.Top = 4
-        Margins.Right = 4
-        Margins.Bottom = 4
+        Left = 155
+        Top = 71
+        Width = 44
+        Height = 25
         Caption = 'Load'
         TabOrder = 5
         TabStop = False
         OnClick = Button6Click
       end
       object Button7: TButton
-        Left = 194
-        Top = 119
-        Width = 55
-        Height = 31
-        Margins.Left = 4
-        Margins.Top = 4
-        Margins.Right = 4
-        Margins.Bottom = 4
+        Left = 155
+        Top = 95
+        Width = 44
+        Height = 25
         Caption = 'Load'
         TabOrder = 6
         TabStop = False
@@ -218,21 +161,18 @@ object FormConsole: TFormConsole
     object ListBox1: TListBox
       Left = 1
       Top = 1
-      Width = 259
-      Height = 290
-      Margins.Left = 4
-      Margins.Top = 4
-      Margins.Right = 4
-      Margins.Bottom = 4
+      Width = 207
+      Height = 232
       TabStop = False
       Style = lbOwnerDrawFixed
       Align = alTop
       Enabled = False
       Font.Charset = RUSSIAN_CHARSET
       Font.Color = clWindowText
-      Font.Height = -14
+      Font.Height = -11
       Font.Name = 'MS Sans Serif'
       Font.Style = []
+      ItemHeight = 13
       Items.Strings = (
         'Instructions:'
         '  Click anywhere'

+ 4 - 1
Examples/Demos/interface/Console/fConsoleD.pas

@@ -133,7 +133,8 @@ begin
   Console.HudSprite.Material.Texture.Image.LoadFromFile('GLScene.bmp');
   Console.AddLine('Console started');
   Console.HUDSpriteColor := clWhite;
-  Console.FontColor := clBlue;
+  Console.FontColor := clBlack;
+  Console.Size := 1;
 
   // two ways of processing commands:
   // 1) manual
@@ -150,6 +151,8 @@ begin
   // register additional commands to enable auto-completion function
   Console.AdditionalCommands.Add('echo');
   Console.AdditionalCommands.Add('exit');
+  // for console saved output and loading .ini files
+  SetCurrentDir(Path  + '\script');
 end;
 
 procedure TFormConsole.GLCadencer1Progress(Sender: TObject;

+ 4 - 4
Examples/Demos/interface/GuiPaint/fGuiPaintC.cpp

@@ -27,7 +27,10 @@ __fastcall TForm1::TForm1(TComponent* Owner)
 //---------------------------------------------------------------------------
 void __fastcall TForm1::FormCreate(TObject *Sender)
 {
-  TFileName Path = GetCurrentAssetPath();
+  TFileName Path = GetCurrentAssetPath() + "\\button";
+  SetCurrentDir(Path);
+  GLMaterialLibrary1->TexturePaths = Path;
+
   GLMaterialLibrary1->TexturePaths = GetCurrentDir();
   GLCanvas->MaxInvalidRenderCount = 40;
   StartX = -1;
@@ -142,9 +145,6 @@ void __fastcall TForm1::GLCanvasMouseUp(TObject *Sender, TMouseButton Button, TS
 }
 //---------------------------------------------------------------------------
 
-
-
-
 void __fastcall TForm1::GLCanvasRender(TGLCustomControl *Sender, TBitmap *Bitmap)
 
 {

+ 0 - 2
Examples/Demos/interface/GuiPaint/fGuiPaintC.dfm

@@ -11,12 +11,10 @@ object Form1: TForm1
   Font.Name = 'Tahoma'
   Font.Style = []
   Menu = MainMenu1
-  OldCreateOrder = False
   OnCreate = FormCreate
   OnKeyDown = FormKeyDown
   OnKeyPress = FormKeyPress
   OnKeyUp = FormKeyUp
-  PixelsPerInch = 96
   TextHeight = 13
   object GLSceneViewer1: TGLSceneViewer
     Left = 0

+ 3 - 3
Examples/Demos/interface/GuiPaint/fGuiPaintD.pas

@@ -113,9 +113,9 @@ implementation
 
 procedure TFormGuiPaint.FormCreate(Sender: TObject);
 begin
-  var Path: TFileName := GetCurrentAssetPath();
-  SetCurrentDir(Path  + '\texture');
-  GLMaterialLibrary1.TexturePaths := GetCurrentDir();
+  var Path: TFileName := GetCurrentAssetPath()  + '\button';
+  SetCurrentDir(Path);
+  GLMaterialLibrary1.TexturePaths := Path;
   GLCanvas.MaxInvalidRenderCount := 40;
   StartX := -1;
 end;

+ 5 - 5
Examples/Demos/interface/Pick/fPickD.dfm

@@ -3,8 +3,8 @@ object Form1: TForm1
   Top = 96
   BorderStyle = bsDialog
   Caption = 'Pick'
-  ClientHeight = 333
-  ClientWidth = 422
+  ClientHeight = 471
+  ClientWidth = 662
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
@@ -17,11 +17,11 @@ object Form1: TForm1
   object GLSceneViewer1: TGLSceneViewer
     Left = 0
     Top = 0
-    Width = 422
-    Height = 333
+    Width = 662
+    Height = 471
     Camera = GLCamera1
     Buffer.BackgroundColor = clBackground
-    FieldOfView = 146.569946289062500000
+    FieldOfView = 156.026565551757800000
     PenAsTouch = False
     Align = alClient
     OnMouseDown = GLSceneViewer1MouseDown

+ 10 - 12
Examples/Demos/interface/WinFont/fWinFontD.dfm

@@ -2,34 +2,32 @@ object FormWinFont: TFormWinFont
   Left = 129
   Top = 112
   Caption = 'Windows Font'
-  ClientHeight = 479
-  ClientWidth = 870
+  ClientHeight = 446
+  ClientWidth = 742
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
-  Font.Height = -14
+  Font.Height = -11
   Font.Name = 'MS Sans Serif'
   Font.Style = []
   Menu = MainMenu1
+  Position = poScreenCenter
   OnCreate = FormCreate
-  PixelsPerInch = 120
-  TextHeight = 16
+  TextHeight = 13
   object GLSceneViewer1: TGLSceneViewer
     Left = 0
     Top = 0
-    Width = 870
-    Height = 479
-    Margins.Left = 4
-    Margins.Top = 4
-    Margins.Right = 4
-    Margins.Bottom = 4
+    Width = 742
+    Height = 446
     Camera = GLCamera1
     Buffer.BackgroundColor = clBackground
-    FieldOfView = 156.415664672851600000
+    FieldOfView = 154.724838256835900000
     PenAsTouch = False
     Align = alClient
     OnClick = GLSceneViewer1Click
     TabOrder = 0
+    ExplicitWidth = 733
+    ExplicitHeight = 414
   end
   object GLScene1: TGLScene
     ObjectsSorting = osNone

+ 1 - 1
Examples/Demos/interface/WinFont/fWinFontD.pas

@@ -63,7 +63,7 @@ var
 implementation
 
 uses
-  fWinTexture;
+  fWinTextureD;
 
 {$R *.DFM}
 

+ 1 - 0
Examples/Demos/interface/bmpfont/fBmpfontC.cpp

@@ -30,6 +30,7 @@ void __fastcall TForm1::FormCreate(TObject *Sender)
 {
    // Load the font bitmap from media dir
    TFileName Path = GetCurrentAssetPath();
+   SetCurrentDir(Path  + "\\texture");
    BitmapFont1->Glyphs->LoadFromFile("darkgold_font.bmp");
    // sorry, couldn't resist...
 

+ 1 - 0
Examples/Demos/interface/bmpfont/fBmpfontC.dfm

@@ -10,6 +10,7 @@ object Form1: TForm1
   Font.Height = -11
   Font.Name = 'Tahoma'
   Font.Style = []
+  Position = poScreenCenter
   OnCreate = FormCreate
   TextHeight = 13
   object GLSceneViewer1: TGLSceneViewer

+ 23 - 30
Examples/Demos/interface/camera/fCameraD.dfm

@@ -3,49 +3,43 @@ object FormCamera: TFormCamera
   Top = 129
   BorderWidth = 6
   Caption = 'Camera'
-  ClientHeight = 525
-  ClientWidth = 581
+  ClientHeight = 450
+  ClientWidth = 602
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
-  Font.Height = -14
+  Font.Height = -11
   Font.Name = 'MS Sans Serif'
   Font.Style = []
+  Position = poScreenCenter
   OnKeyPress = FormKeyPress
   OnMouseWheel = FormMouseWheel
-  PixelsPerInch = 120
   DesignSize = (
-    581
-    525)
-  TextHeight = 16
+    602
+    450)
+  TextHeight = 13
   object GLSceneViewer1: TGLSceneViewer
     Left = 0
     Top = 0
-    Width = 581
-    Height = 525
-    Margins.Left = 4
-    Margins.Top = 4
-    Margins.Right = 4
-    Margins.Bottom = 4
+    Width = 602
+    Height = 450
     Camera = GLCamera1
     VSync = vsmSync
     Buffer.BackgroundColor = clTeal
-    FieldOfView = 158.431411743164100000
+    FieldOfView = 154.942382812500000000
     PenAsTouch = False
     Align = alClient
     OnMouseDown = GLSceneViewer1MouseDown
     OnMouseMove = GLSceneViewer1MouseMove
     TabOrder = 0
+    ExplicitWidth = 509
+    ExplicitHeight = 427
   end
   object RadioGroup1: TRadioGroup
-    Left = 5
-    Top = 435
-    Width = 226
-    Height = 91
-    Margins.Left = 4
-    Margins.Top = 4
-    Margins.Right = 4
-    Margins.Bottom = 4
+    Left = 4
+    Top = 378
+    Width = 181
+    Height = 73
     Anchors = [akLeft, akBottom]
     Caption = 'Style'
     ItemIndex = 0
@@ -56,16 +50,13 @@ object FormCamera: TFormCamera
       'Custom')
     TabOrder = 1
     OnClick = RadioGroup1Click
+    ExplicitTop = 348
   end
   object RadioGroup2: TRadioGroup
-    Left = 386
-    Top = 455
-    Width = 182
-    Height = 71
-    Margins.Left = 4
-    Margins.Top = 4
-    Margins.Right = 4
-    Margins.Bottom = 4
+    Left = 446
+    Top = 394
+    Width = 145
+    Height = 57
     Anchors = [akRight, akBottom]
     Caption = 'Keep mode'
     ItemIndex = 0
@@ -74,6 +65,8 @@ object FormCamera: TFormCamera
       'Vertical')
     TabOrder = 2
     OnClick = RadioGroup2Click
+    ExplicitLeft = 309
+    ExplicitTop = 364
   end
   object GLScene1: TGLScene
     Left = 32

+ 1 - 0
Examples/Demos/interface/cursor/fCursorC.cpp

@@ -28,6 +28,7 @@ __fastcall TForm1::TForm1(TComponent* Owner)
 void __fastcall TForm1::FormCreate(TObject *Sender)
 {
    TFileName Path = GetCurrentAssetPath();
+   SetCurrentDir(Path  + "\\button");
    // hide the Windows cursor for the GLSceneViewer
    GLSceneViewer1->Cursor = crNone;
    // and load my ugly cursor (size adjusted in design props)

+ 0 - 2
Examples/Demos/interface/cursor/fCursorC.dfm

@@ -11,9 +11,7 @@ object Form1: TForm1
   Font.Name = 'Tahoma'
   Font.Style = []
   Menu = MainMenu1
-  OldCreateOrder = False
   OnCreate = FormCreate
-  PixelsPerInch = 96
   TextHeight = 13
   object Bevel1: TBevel
     Left = 0

+ 13 - 26
Examples/Demos/interface/cursor/fCursorD.dfm

@@ -2,43 +2,34 @@ object FormCursor: TFormCursor
   Left = 201
   Top = 119
   Caption = 'Cursor'
-  ClientHeight = 390
-  ClientWidth = 484
+  ClientHeight = 312
+  ClientWidth = 387
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
-  Font.Height = -14
+  Font.Height = -11
   Font.Name = 'MS Sans Serif'
   Font.Style = []
   Menu = MainMenu1
   OnCreate = FormCreate
-  PixelsPerInch = 120
-  TextHeight = 16
+  TextHeight = 13
   object Bevel1: TBevel
     Left = 0
     Top = 0
-    Width = 484
-    Height = 4
-    Margins.Left = 4
-    Margins.Top = 4
-    Margins.Right = 4
-    Margins.Bottom = 4
+    Width = 387
+    Height = 3
     Align = alTop
     Shape = bsTopLine
   end
   object GLSceneViewer1: TGLSceneViewer
     Left = 0
-    Top = 4
-    Width = 484
-    Height = 362
-    Margins.Left = 4
-    Margins.Top = 4
-    Margins.Right = 4
-    Margins.Bottom = 4
+    Top = 3
+    Width = 387
+    Height = 290
     Camera = GLCamera1
     AfterRender = GLSceneViewer1AfterRender
     Buffer.DepthTest = False
-    FieldOfView = 149.115112304687500000
+    FieldOfView = 141.948791503906300000
     PenAsTouch = False
     Align = alClient
     OnMouseMove = GLSceneViewer1MouseMove
@@ -46,13 +37,9 @@ object FormCursor: TFormCursor
   end
   object StatusBar1: TStatusBar
     Left = 0
-    Top = 366
-    Width = 484
-    Height = 24
-    Margins.Left = 4
-    Margins.Top = 4
-    Margins.Right = 4
-    Margins.Bottom = 4
+    Top = 293
+    Width = 387
+    Height = 19
     Panels = <>
   end
   object GLScene1: TGLScene

+ 1 - 1
Examples/Demos/interface/cursor/fCursorD.pas

@@ -86,7 +86,7 @@ implementation
 procedure TFormCursor.FormCreate(Sender: TObject);
 begin
   var Path: TFileName := GetCurrentAssetPath();
-  SetCurrentDir(Path  + '\texture');
+  SetCurrentDir(Path  + '\button');
   // hide the Windows cursor for the GLSceneViewer
   GLSceneViewer1.Cursor := crNone;
   // and load an ugly cursor (size adjusted in design props)

+ 8 - 12
Examples/Demos/interface/fontcolor/fFontColorD.dfm

@@ -3,29 +3,25 @@ object FormFontColor: TFormFontColor
   Top = 107
   BorderIcons = [biSystemMenu]
   Caption = 'Font Color'
-  ClientHeight = 464
-  ClientWidth = 596
+  ClientHeight = 371
+  ClientWidth = 477
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
-  Font.Height = -14
+  Font.Height = -11
   Font.Name = 'MS Sans Serif'
   Font.Style = []
+  Position = poScreenCenter
   OnCreate = FormCreate
-  PixelsPerInch = 120
-  TextHeight = 16
+  TextHeight = 13
   object GLSceneViewer1: TGLSceneViewer
     Left = 0
     Top = 0
-    Width = 596
-    Height = 464
-    Margins.Left = 4
-    Margins.Top = 4
-    Margins.Right = 4
-    Margins.Bottom = 4
+    Width = 477
+    Height = 371
     Camera = GLCamera1
     Buffer.BackgroundColor = clTeal
-    FieldOfView = 155.675598144531300000
+    FieldOfView = 149.829803466796900000
     PenAsTouch = False
     Align = alClient
     TabOrder = 0

+ 29 - 29
Examples/Demos/movements/objmove/fObjmoveD.dfm

@@ -2,8 +2,8 @@ object FormObjmove: TFormObjmove
   Left = 87
   Top = 128
   Caption = 'Moving Objects with Mouse'
-  ClientHeight = 502
-  ClientWidth = 666
+  ClientHeight = 629
+  ClientWidth = 1001
   Color = clBtnFace
   ParentFont = True
   KeyPreview = True
@@ -14,13 +14,13 @@ object FormObjmove: TFormObjmove
   OnKeyUp = FormKeyUp
   TextHeight = 20
   object Scn: TGLSceneViewer
-    Left = 161
+    Left = 169
     Top = 0
-    Width = 505
-    Height = 484
+    Width = 832
+    Height = 611
     Camera = GLCamera
     Buffer.BackgroundColor = clBackground
-    FieldOfView = 29.538454055786130000
+    FieldOfView = 36.816364288330080000
     PenAsTouch = False
     Align = alClient
     OnMouseDown = ScnMouseDown
@@ -31,42 +31,44 @@ object FormObjmove: TFormObjmove
   object Panel1: TPanel
     Left = 0
     Top = 0
-    Width = 161
-    Height = 484
+    Width = 169
+    Height = 611
     Align = alLeft
     BevelOuter = bvNone
     TabOrder = 1
     object Label2: TLabel
       Left = 0
       Top = 0
-      Width = 161
-      Height = 60
+      Width = 169
+      Height = 40
       Align = alTop
-      Caption = 'Select and move with the mouse any of the cubes.'
+      Caption = 'Select and move cubes with mouse'
       ShowAccelChar = False
       WordWrap = True
-      ExplicitWidth = 146
+      ExplicitWidth = 156
     end
     object Label3: TLabel
       Left = 0
-      Top = 60
-      Width = 161
+      Top = 40
+      Width = 169
       Height = 40
       Align = alTop
       Caption = 'Default movement is on the XY plane.'
       ShowAccelChar = False
       WordWrap = True
+      ExplicitTop = 60
       ExplicitWidth = 159
     end
     object Label4: TLabel
       Left = 0
-      Top = 100
-      Width = 161
+      Top = 80
+      Width = 169
       Height = 40
       Align = alTop
       Caption = 'Shift + Drag moves on the XZ plane.'
       ShowAccelChar = False
       WordWrap = True
+      ExplicitTop = 100
       ExplicitWidth = 153
     end
     object Button1: TButton
@@ -79,12 +81,14 @@ object FormObjmove: TFormObjmove
     end
     object GroupBox1: TGroupBox
       Left = 0
-      Top = 140
-      Width = 161
+      Top = 120
+      Width = 169
       Height = 42
       Align = alTop
       Caption = 'Options'
       TabOrder = 1
+      ExplicitLeft = -6
+      ExplicitTop = 152
       object ShowAxes: TCheckBox
         Left = 5
         Top = 18
@@ -100,10 +104,12 @@ object FormObjmove: TFormObjmove
   end
   object StatusBar1: TStatusBar
     Left = 0
-    Top = 484
-    Width = 666
+    Top = 611
+    Width = 1001
     Height = 18
     Panels = <>
+    ExplicitTop = 484
+    ExplicitWidth = 666
   end
   object GLScene1: TGLScene
     Left = 296
@@ -164,9 +170,9 @@ object FormObjmove: TFormObjmove
     end
     object YArrow: TGLArrowLine
       Material.FrontProperties.Ambient.Color = {000000000000003F000000000000803F}
-      Direction.Coordinates = {24DE4C320000803F2CBD3B3300000000}
+      Direction.Coordinates = {000000000000803F0000000000000000}
       Position.Coordinates = {000080BFCDCCCC3D000080BF0000803F}
-      Up.Coordinates = {2EBD3BB32CBD3BB30000803F00000000}
+      Up.Coordinates = {2EBD3BB3000000000000803F00000000}
       BottomRadius = 0.009999999776482582
       Height = 2.200000047683716000
       TopRadius = 0.009999999776482582
@@ -247,16 +253,10 @@ object FormObjmove: TFormObjmove
   object GLWindowsBitmapFont1: TGLWindowsBitmapFont
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clWhite
-    Font.Height = -11
+    Font.Height = -15
     Font.Name = 'Tahoma'
     Font.Style = []
     Left = 448
     Top = 8
   end
-  object GLSmoothNavigator1: TGLSmoothNavigator
-    MovingObject = DummyCube
-    MoveAroundParams.TargetObject = DummyCube
-    Left = 448
-    Top = 72
-  end
 end

+ 22 - 5
Examples/Demos/movements/objmove/fObjmoveD.pas

@@ -33,9 +33,7 @@ uses
   GLS.BitmapFont,
   GLS.WindowsFont,
   GLS.HUDObjects,
-  GLS.SimpleNavigation,
-  GLS.Navigator,
-  GLS.SmoothNavigator;
+  GLS.Navigator;
 
 type
   TFormObjmove = class(TForm)
@@ -64,7 +62,6 @@ type
     GroupBox1: TGroupBox;
     ShowAxes: TCheckBox;
     StatusBar1: TStatusBar;
-    GLSmoothNavigator1: TGLSmoothNavigator;
     procedure ScnMouseDown(Sender: TObject; Button: TMouseButton;
       Shift: TShiftState; X, Y: Integer);
     procedure ScnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
@@ -95,6 +92,8 @@ implementation
 
 {$R *.DFM}
 
+//------------------------------------------------------------------
+
 procedure TFormObjmove.FormCreate(Sender: TObject);
 begin
   UpdateHudText;
@@ -107,6 +106,8 @@ begin
   Cube.Position.Z := 1;
 end;
 
+//------------------------------------------------------------------
+
 function TFormObjmove.MouseWorldPos(X, Y: Integer): TGLVector;
 var
   v: TGLVector;
@@ -126,6 +127,8 @@ begin
     SetVector(Result, NullVector);
 end;
 
+//------------------------------------------------------------------
+
 procedure TFormObjmove.ProcessPick(pick: TGLBaseSceneObject);
 begin
   if Assigned(pick) then
@@ -152,6 +155,8 @@ begin
   UpdateHudText;
 end;
 
+//------------------------------------------------------------------
+
 procedure TFormObjmove.ScnMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 var
@@ -167,6 +172,8 @@ begin
     lastMouseWorldPos := MouseWorldPos(X, Y);
 end;
 
+//------------------------------------------------------------------
+
 procedure TFormObjmove.ScnMouseMove(Sender: TObject; Shift: TShiftState;
   X, Y: Integer);
 var
@@ -192,12 +199,16 @@ begin
   Dec(ScnMouseMoveCnt);
 end;
 
+//------------------------------------------------------------------
+
 procedure TFormObjmove.ShowAxesClick(Sender: TObject);
 begin
   // Unselect all
   ProcessPick(nil);
 end;
 
+//------------------------------------------------------------------
+
 procedure TFormObjmove.FormMouseWheel(Sender: TObject; Shift: TShiftState;
   WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
 begin
@@ -207,6 +218,8 @@ begin
     GLCamera.AdjustDistanceToTarget(Power(1.1, -WheelDelta / 120));
 end;
 
+//------------------------------------------------------------------
+
 procedure TFormObjmove.FormKeyPress(Sender: TObject; var Key: Char);
 begin
   with GLCamera do
@@ -220,6 +233,8 @@ begin
     end;
 end;
 
+//------------------------------------------------------------------
+
 procedure TFormObjmove.UpdateHudText;
 var
   objPos, winPos: TAffineVector;
@@ -229,7 +244,7 @@ begin
     SetVector(objPos, CurrentPick.AbsolutePosition);
 
     TopText.Text := Format(
-      'New Object Position: Xn: %4.4f, Yn: %4.4f, Zn: %4.4f',
+      'New Object Position: Xn: %4.3f, Yn: %4.3f, Zn: %4.3f',
       [objPos.X, objPos.Y, objPos.Z]);
 
     winPos := Scn.Buffer.WorldToScreen(objPos);
@@ -249,6 +264,8 @@ begin
   end;
 end;
 
+//------------------------------------------------------------------
+
 procedure TFormObjmove.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
 begin
   if Assigned(CurrentPick) then

+ 19 - 0
Examples/Demos/specialsFX/PFXCursor/PfxCursorD.dpr

@@ -0,0 +1,19 @@
+(*
+   PFX Cursor Demo
+   Use the mouse left and right buttons
+   to change cursor TGLHUDSprite
+*)
+program PfxCursorD;
+
+uses
+  Forms,
+  fPfxCursorD in 'fPfxCursorD.pas' {Form1};
+
+{$R *.res}
+
+begin
+  Application.Initialize;
+  Application.CreateForm(TForm1, Form1);
+  Application.CreateForm(TForm1, Form1);
+  Application.Run;
+end.

+ 1049 - 0
Examples/Demos/specialsFX/PFXCursor/PfxCursorD.dproj

@@ -0,0 +1,1049 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <PropertyGroup>
+        <ProjectGuid>{51F85A14-91D8-4A96-901C-7ECAB6BD08EA}</ProjectGuid>
+        <MainSource>PfxCursorD.dpr</MainSource>
+        <Base>True</Base>
+        <Config Condition="'$(Config)'==''">Debug</Config>
+        <TargetedPlatforms>1</TargetedPlatforms>
+        <AppType>Application</AppType>
+        <FrameworkType>VCL</FrameworkType>
+        <ProjectVersion>19.4</ProjectVersion>
+        <Platform Condition="'$(Platform)'==''">Win32</Platform>
+    </PropertyGroup>
+    <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
+        <Base>true</Base>
+    </PropertyGroup>
+    <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
+        <Base_Win32>true</Base_Win32>
+        <CfgParent>Base</CfgParent>
+        <Base>true</Base>
+    </PropertyGroup>
+    <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
+        <Base_Win64>true</Base_Win64>
+        <CfgParent>Base</CfgParent>
+        <Base>true</Base>
+    </PropertyGroup>
+    <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
+        <Cfg_1>true</Cfg_1>
+        <CfgParent>Base</CfgParent>
+        <Base>true</Base>
+    </PropertyGroup>
+    <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
+        <Cfg_2>true</Cfg_2>
+        <CfgParent>Base</CfgParent>
+        <Base>true</Base>
+    </PropertyGroup>
+    <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
+        <Cfg_2_Win32>true</Cfg_2_Win32>
+        <CfgParent>Cfg_2</CfgParent>
+        <Cfg_2>true</Cfg_2>
+        <Base>true</Base>
+    </PropertyGroup>
+    <PropertyGroup Condition="'$(Base)'!=''">
+        <DCC_S>false</DCC_S>
+        <VerInfo_Locale>1049</VerInfo_Locale>
+        <DCC_K>false</DCC_K>
+        <DCC_F>false</DCC_F>
+        <DCC_N>false</DCC_N>
+        <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=</VerInfo_Keys>
+        <DCC_E>false</DCC_E>
+        <SanitizedProjectName>PfxCursorD</SanitizedProjectName>
+        <DCC_ImageBase>00400000</DCC_ImageBase>
+        <DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace)</DCC_Namespace>
+    </PropertyGroup>
+    <PropertyGroup Condition="'$(Base_Win32)'!=''">
+        <UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
+        <UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
+        <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
+        <DCC_Namespace>System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
+        <VerInfo_Locale>1033</VerInfo_Locale>
+        <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
+        <Icon_MainIcon>Project1_Icon.ico</Icon_MainIcon>
+        <VerInfo_Keys>CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(ModuleName);FileDescription=$(ModuleName);ProductName=$(ModuleName)</VerInfo_Keys>
+        <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
+    </PropertyGroup>
+    <PropertyGroup Condition="'$(Base_Win64)'!=''">
+        <UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
+        <UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
+        <Icon_MainIcon>Project1_Icon.ico</Icon_MainIcon>
+    </PropertyGroup>
+    <PropertyGroup Condition="'$(Cfg_1)'!=''">
+        <DCC_DebugInformation>0</DCC_DebugInformation>
+        <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
+        <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
+        <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
+    </PropertyGroup>
+    <PropertyGroup Condition="'$(Cfg_2)'!=''">
+        <DCC_Optimize>false</DCC_Optimize>
+        <DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
+        <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
+    </PropertyGroup>
+    <PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
+        <BT_BuildType>Debug</BT_BuildType>
+        <Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
+        <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
+        <VerInfo_Locale>1033</VerInfo_Locale>
+        <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
+        <VerInfo_Keys>CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)</VerInfo_Keys>
+    </PropertyGroup>
+    <ItemGroup>
+        <DelphiCompile Include="$(MainSource)">
+            <MainSource>MainSource</MainSource>
+        </DelphiCompile>
+        <DCCReference Include="fPfxCursorD.pas">
+            <Form>Form1</Form>
+            <FormType>dfm</FormType>
+        </DCCReference>
+        <BuildConfiguration Include="Base">
+            <Key>Base</Key>
+        </BuildConfiguration>
+        <BuildConfiguration Include="Release">
+            <Key>Cfg_1</Key>
+            <CfgParent>Base</CfgParent>
+        </BuildConfiguration>
+        <BuildConfiguration Include="Debug">
+            <Key>Cfg_2</Key>
+            <CfgParent>Base</CfgParent>
+        </BuildConfiguration>
+    </ItemGroup>
+    <ProjectExtensions>
+        <Borland.Personality>Delphi.Personality.12</Borland.Personality>
+        <Borland.ProjectType/>
+        <BorlandProject>
+            <Delphi.Personality>
+                <Source>
+                    <Source Name="MainSource">PfxCursorD.dpr</Source>
+                </Source>
+                <Excluded_Packages>
+                    <Excluded_Packages Name="C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\GLScene_SDL_DT.bpl">File C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\GLScene_SDL_DT.bpl not found</Excluded_Packages>
+                    <Excluded_Packages Name="$(BDSBIN)\bcboffice2k280.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
+                    <Excluded_Packages Name="$(BDSBIN)\bcbofficexp280.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
+                    <Excluded_Packages Name="$(BDSBIN)\dcloffice2k280.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
+                    <Excluded_Packages Name="$(BDSBIN)\dclofficexp280.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
+                </Excluded_Packages>
+            </Delphi.Personality>
+            <Platforms>
+                <Platform value="Win32">True</Platform>
+                <Platform value="Win64">False</Platform>
+            </Platforms>
+            <Deployment Version="3">
+                <DeployFile LocalName="PfxCursorD.exe" Configuration="Debug" Class="ProjectOutput">
+                    <Platform Name="Win32">
+                        <RemoteName>PfxCursorD.exe</RemoteName>
+                        <Overwrite>true</Overwrite>
+                    </Platform>
+                </DeployFile>
+                <DeployClass Name="AdditionalDebugSymbols">
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="OSX32">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Win32">
+                        <Operation>0</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="AndroidClasses">
+                    <Platform Name="Android">
+                        <RemoteDir>classes</RemoteDir>
+                        <Operation>64</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>classes</RemoteDir>
+                        <Operation>64</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="AndroidClassesDexFile">
+                    <Platform Name="Android">
+                        <RemoteDir>classes</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>classes</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="AndroidFileProvider">
+                    <Platform Name="Android">
+                        <RemoteDir>res\xml</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\xml</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="AndroidGDBServer">
+                    <Platform Name="Android">
+                        <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="AndroidLibnativeArmeabiFile">
+                    <Platform Name="Android">
+                        <RemoteDir>library\lib\armeabi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>library\lib\armeabi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="AndroidLibnativeArmeabiv7aFile">
+                    <Platform Name="Android64">
+                        <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="AndroidLibnativeMipsFile">
+                    <Platform Name="Android">
+                        <RemoteDir>library\lib\mips</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>library\lib\mips</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="AndroidLibnativeX86File"/>
+                <DeployClass Name="AndroidServiceOutput">
+                    <Platform Name="Android">
+                        <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>library\lib\arm64-v8a</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="AndroidServiceOutput_Android32">
+                    <Platform Name="Android64">
+                        <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="AndroidSplashImageDef">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="AndroidSplashStyles">
+                    <Platform Name="Android">
+                        <RemoteDir>res\values</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\values</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="AndroidSplashStylesV21">
+                    <Platform Name="Android">
+                        <RemoteDir>res\values-v21</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\values-v21</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_Colors">
+                    <Platform Name="Android">
+                        <RemoteDir>res\values</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\values</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_DefaultAppIcon">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_LauncherIcon144">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-xxhdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-xxhdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_LauncherIcon192">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-xxxhdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-xxxhdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_LauncherIcon36">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-ldpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-ldpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_LauncherIcon48">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-mdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-mdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_LauncherIcon72">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-hdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-hdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_LauncherIcon96">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-xhdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-xhdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_NotificationIcon24">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-mdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-mdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_NotificationIcon36">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-hdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-hdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_NotificationIcon48">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-xhdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-xhdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_NotificationIcon72">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-xxhdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-xxhdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_NotificationIcon96">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-xxxhdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-xxxhdpi</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_SplashImage426">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-small</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-small</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_SplashImage470">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-normal</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-normal</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_SplashImage640">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-large</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-large</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_SplashImage960">
+                    <Platform Name="Android">
+                        <RemoteDir>res\drawable-xlarge</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\drawable-xlarge</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="Android_Strings">
+                    <Platform Name="Android">
+                        <RemoteDir>res\values</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>res\values</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="DebugSymbols">
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="OSX32">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Win32">
+                        <Operation>0</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="DependencyFramework">
+                    <Platform Name="OSX32">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                        <Extensions>.framework</Extensions>
+                    </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                        <Extensions>.framework</Extensions>
+                    </Platform>
+                    <Platform Name="OSXARM64">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                        <Extensions>.framework</Extensions>
+                    </Platform>
+                    <Platform Name="Win32">
+                        <Operation>0</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="DependencyModule">
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
+                    <Platform Name="OSX32">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
+                    <Platform Name="OSXARM64">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
+                    <Platform Name="Win32">
+                        <Operation>0</Operation>
+                        <Extensions>.dll;.bpl</Extensions>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Required="true" Name="DependencyPackage">
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
+                    <Platform Name="OSX32">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
+                    <Platform Name="OSXARM64">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                        <Extensions>.dylib</Extensions>
+                    </Platform>
+                    <Platform Name="Win32">
+                        <Operation>0</Operation>
+                        <Extensions>.bpl</Extensions>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="File">
+                    <Platform Name="Android">
+                        <Operation>0</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <Operation>0</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice32">
+                        <Operation>0</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>0</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>0</Operation>
+                    </Platform>
+                    <Platform Name="OSX32">
+                        <RemoteDir>Contents\Resources\StartUp\</RemoteDir>
+                        <Operation>0</Operation>
+                    </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents\Resources\StartUp\</RemoteDir>
+                        <Operation>0</Operation>
+                    </Platform>
+                    <Platform Name="OSXARM64">
+                        <RemoteDir>Contents\Resources\StartUp\</RemoteDir>
+                        <Operation>0</Operation>
+                    </Platform>
+                    <Platform Name="Win32">
+                        <Operation>0</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iOS_AppStore1024">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPad_AppIcon152">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPad_AppIcon167">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPad_Launch1024">
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPad_Launch1536">
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPad_Launch2048">
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPad_Launch2x">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPad_Launch768">
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPad_LaunchDark2x">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPad_Notification40">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPad_Setting58">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPad_SpotLight80">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_AppIcon120">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_AppIcon180">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_Launch2x">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_Launch320">
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_Launch3x">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_Launch640">
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_Launch640x1136">
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_LaunchDark2x">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_LaunchDark3x">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_Notification40">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_Notification60">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_Setting58">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_Setting87">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_Spotlight120">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="iPhone_Spotlight80">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectAndroidManifest">
+                    <Platform Name="Android">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectiOSDeviceDebug">
+                    <Platform Name="iOSDevice32">
+                        <RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectiOSDeviceResourceRules">
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectiOSEntitlements">
+                    <Platform Name="iOSDevice32">
+                        <RemoteDir>..\</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectiOSInfoPList">
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectiOSLaunchScreen">
+                    <Platform Name="iOSDevice64">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir>
+                        <Operation>64</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir>
+                        <Operation>64</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectiOSResource">
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectOSXDebug">
+                    <Platform Name="OSX64">
+                        <RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="OSXARM64">
+                        <RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectOSXEntitlements">
+                    <Platform Name="OSX32">
+                        <RemoteDir>..\</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>..\</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="OSXARM64">
+                        <RemoteDir>..\</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectOSXInfoPList">
+                    <Platform Name="OSX32">
+                        <RemoteDir>Contents</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="OSXARM64">
+                        <RemoteDir>Contents</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectOSXResource">
+                    <Platform Name="OSX32">
+                        <RemoteDir>Contents\Resources</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents\Resources</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="OSXARM64">
+                        <RemoteDir>Contents\Resources</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Required="true" Name="ProjectOutput">
+                    <Platform Name="Android">
+                        <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Android64">
+                        <RemoteDir>library\lib\arm64-v8a</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice32">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSDevice64">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="iOSSimulator">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Linux64">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="OSX32">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="OSX64">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="OSXARM64">
+                        <RemoteDir>Contents\MacOS</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Win32">
+                        <Operation>0</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectOutput_Android32">
+                    <Platform Name="Android64">
+                        <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="ProjectUWPManifest">
+                    <Platform Name="Win32">
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Win64">
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="UWP_DelphiLogo150">
+                    <Platform Name="Win32">
+                        <RemoteDir>Assets</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Win64">
+                        <RemoteDir>Assets</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <DeployClass Name="UWP_DelphiLogo44">
+                    <Platform Name="Win32">
+                        <RemoteDir>Assets</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                    <Platform Name="Win64">
+                        <RemoteDir>Assets</RemoteDir>
+                        <Operation>1</Operation>
+                    </Platform>
+                </DeployClass>
+                <ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
+                <ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
+                <ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
+                <ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
+                <ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
+                <ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
+                <ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/>
+                <ProjectRoot Platform="OSX64" Name="$(PROJECTNAME).app"/>
+                <ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME).app"/>
+                <ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
+                <ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
+            </Deployment>
+        </BorlandProject>
+        <ProjectFileVersion>12</ProjectFileVersion>
+    </ProjectExtensions>
+    <Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
+    <Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
+    <Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
+</Project>

+ 338 - 0
Examples/Demos/specialsFX/PFXCursor/fPfxCursorD.dfm

@@ -0,0 +1,338 @@
+object Form1: TForm1
+  Left = 403
+  Top = 221
+  ClientHeight = 516
+  ClientWidth = 761
+  Color = clBtnFace
+  Font.Charset = DEFAULT_CHARSET
+  Font.Color = clWindowText
+  Font.Height = -11
+  Font.Name = 'MS Sans Serif'
+  Font.Style = []
+  Position = poScreenCenter
+  OnCreate = FormCreate
+  OnShow = FormShow
+  TextHeight = 13
+  object vp: TGLSceneViewer
+    Left = 0
+    Top = 0
+    Width = 600
+    Height = 516
+    Cursor = -1
+    Camera = GLCamera1
+    Buffer.BackgroundColor = clNavy
+    Buffer.ContextOptions = [roDoubleBuffer, roRenderToWindow]
+    FieldOfView = 158.064254760742200000
+    PenAsTouch = False
+    Align = alClient
+    TabOrder = 0
+  end
+  object Panel1: TPanel
+    Left = 600
+    Top = 0
+    Width = 161
+    Height = 516
+    Align = alRight
+    TabOrder = 1
+    ExplicitLeft = 592
+    ExplicitTop = 8
+    object RadioGroup1: TRadioGroup
+      Left = 18
+      Top = 232
+      Width = 137
+      Height = 105
+      Caption = 'Fire'
+      ItemIndex = 0
+      Items.Strings = (
+        'Burn'
+        'No Burn')
+      TabOrder = 0
+      OnClick = RadioGroup1Click
+    end
+    object RadioGroup2: TRadioGroup
+      Left = 18
+      Top = 64
+      Width = 137
+      Height = 105
+      Caption = 'Perlin'
+      ItemIndex = 0
+      Items.Strings = (
+        'Trail'
+        'No Trail')
+      TabOrder = 1
+      OnClick = RadioGroup2Click
+    end
+    object stPerlin: TStaticText
+      Left = 16
+      Top = 32
+      Width = 132
+      Height = 17
+      Caption = 'Left mouse button for perlin'
+      TabOrder = 2
+      OnClick = stPerlinClick
+    end
+    object stFire: TStaticText
+      Left = 16
+      Top = 200
+      Width = 128
+      Height = 17
+      Caption = 'Right mouse button for fire'
+      TabOrder = 3
+    end
+  end
+  object GLScene1: TGLScene
+    Left = 224
+    Top = 16
+    object GLParticleFXRenderer1: TGLParticleFXRenderer
+    end
+    object Light1: TGLLightSource
+      ConstAttenuation = 1.000000000000000000
+      Position.Coordinates = {000000000000A040000000400000803F}
+      SpotCutOff = 180.000000000000000000
+    end
+    object cur: TGLHUDSprite
+      Material.FrontProperties.Diffuse.Color = {000000000000803F000000000000803F}
+      Material.BlendingMode = bmTransparency
+      Material.MaterialOptions = [moNoLighting]
+      Material.Texture.ImageAlpha = tiaAlphaFromIntensity
+      Material.Texture.TextureMode = tmModulate
+      Material.Texture.TextureWrap = twNone
+      Material.Texture.Disabled = False
+      Position.Coordinates = {00C08A4300C08A43000000000000803F}
+      Width = 32.000000000000000000
+      Height = 32.000000000000000000
+      Rotation = 0.000000000000000000
+    end
+    object dc_cur: TGLDummyCube
+      CubeSize = 0.009999999776482582
+      VisibleAtRunTime = True
+      object dc1: TGLDummyCube
+        Visible = False
+        CubeSize = 1.000000000000000000
+        EffectsData = {
+          0458434F4C02010203061254474C536F75726365504658456666656374020202
+          00120000000002000200060470667831050000000000000080FE3F0206020009
+          00000000000000BF0000000000000000020008020008050000000000CDCCCCFC
+          3F050000000000CDCCCCFC3F0500000000000AD7A3F83F020002000905000000
+          000000000000000902000200020202001200000000020002000617474C506F69
+          6E744C696768745046584D616E6167657232050000000000000080FD3F020602
+          0008020008020008050000000000CDCCCCFD3F050000000000CDCCCCFC3F0500
+          000000000AD7A3F83F0200020009050000000000000000000009020002000202
+          02001200000000020002000617474C506F696E744C696768745046584D616E61
+          67657233050000000000000080FF3F0206020008020008020008050000000000
+          000000000005000000000000000000000500000000000AD7A3F73F0200020009
+          0500000000000000000000090200}
+      end
+      object dc2: TGLDummyCube
+        Visible = False
+        CubeSize = 1.000000000000000000
+        EffectsData = {
+          0458434F4C02010201061254474C536F75726365504658456666656374020202
+          00120000000002000200060470667832050000000000000080FF3F0206020009
+          00000000000000400000000000000000020008020008050000000000000080FE
+          3F050000000000CDCCCCFC3F0500000000008FC2F5F83F020102010905000000
+          00000000000000090201}
+      end
+      object dc3: TGLDummyCube
+        CubeSize = 1.000000000000000000
+        EffectsData = {
+          0458434F4C02010201061254474C536F75726365504658456666656374020202
+          00120000000002000200060470667833050000000000000080FF3F0206020008
+          0200080200080500000000000000800040050000000000CDCCCCFB3F05000000
+          00000AD7A3F73F02000200090500000000000000000000090200}
+      end
+    end
+    object rend: TGLParticleFXRenderer
+    end
+    object GLDummyCube3: TGLDummyCube
+      CubeSize = 1.000000000000000000
+      object GLCone1: TGLCone
+        Material.FrontProperties.Emission.Color = {CDCC4C3FACC8483E9A99193F0000803F}
+        Direction.Coordinates = {000000002EBDBBB3000080BF00000000}
+        PitchAngle = 180.000000000000000000
+        Position.Coordinates = {000080BF00000000000000000000803F}
+        Up.Coordinates = {00000000000080BF2EBDBB3300000000}
+        BottomRadius = 0.300000011920929000
+        Height = 0.500000000000000000
+        object GLDummyCube1: TGLDummyCube
+          Position.Coordinates = {000000009A9919BE000000000000803F}
+          CubeSize = 1.000000000000000000
+          EffectsData = {
+            0458434F4C02010201061254474C536F75726365504658456666656374020202
+            001200000000020002000613474C5065726C696E5046584D616E616765723105
+            0000000000000080FD3F0206020009000000000000803F000000000000000002
+            0008020008050000000000000000000005000000000000000000000500000000
+            00CDCCCCFB3F02000200090500000000000000000000080200}
+        end
+      end
+      object GLCone2: TGLCone
+        Material.FrontProperties.Emission.Color = {0000803FF8FEFE3E000000000000803F}
+        Direction.Coordinates = {000000002EBDBBB3000080BF00000000}
+        PitchAngle = 180.000000000000000000
+        Position.Coordinates = {0000803F00000000000000000000803F}
+        Up.Coordinates = {00000000000080BF2EBDBB3300000000}
+        BottomRadius = 0.300000011920929000
+        Height = 0.500000000000000000
+        object GLDummyCube2: TGLDummyCube
+          Position.Coordinates = {000000009A9919BE000000000000803F}
+          CubeSize = 1.000000000000000000
+          EffectsData = {
+            0458434F4C02010201060A54474C424669726546580201020012000000000200
+            02001200000000}
+        end
+      end
+    end
+    object GLCamera1: TGLCamera
+      DepthOfView = 100.000000000000000000
+      FocalLength = 50.000000000000000000
+      TargetObject = GLDummyCube3
+      Position.Coordinates = {0000000000000040000080400000803F}
+    end
+  end
+  object GLMaterialLibrary1: TGLMaterialLibrary
+    Materials = <
+      item
+        Name = 'plane'
+        Tag = 0
+        Material.FrontProperties.Emission.Color = {DFDEDE3EDCDB5B3F9493133F0000803F}
+        Material.Texture.ImageClassName = 'TGLBlankImage'
+        Material.Texture.Image.ColorFormat = 6408
+        Material.Texture.ImageAlpha = tiaAlphaFromIntensity
+      end>
+    Left = 224
+    Top = 80
+  end
+  object GLCadencer1: TGLCadencer
+    Scene = GLScene1
+    Enabled = False
+    OnProgress = GLCadencer1Progress
+    Left = 312
+    Top = 16
+  end
+  object pfx1: TGLPointLightPFXManager
+    Cadencer = GLCadencer1
+    Renderer = rend
+    Friction = 1.000000000000000000
+    ColorMode = scmFade
+    ParticleSize = 1.000000000000000000
+    ColorInner.Color = {0000803F000000000000803F0000803F}
+    ColorOuter.Color = {0000803F00000000000000000000803F}
+    LifeColors = <
+      item
+        LifeTime = 5.000000000000000000
+        SizeScale = 2.000000000000000000
+      end>
+    Left = 312
+    Top = 80
+  end
+  object GLAsyncTimer1: TGLAsyncTimer
+    Enabled = True
+    Interval = 800
+    OnTimer = GLAsyncTimer1Timer
+    ThreadPriority = tpNormal
+    Left = 384
+    Top = 16
+  end
+  object GLPointLightPFXManager2: TGLPointLightPFXManager
+    Cadencer = GLCadencer1
+    Renderer = rend
+    Acceleration.Coordinates = {00000000000040BF0000000000000000}
+    Friction = 1.000000000000000000
+    ParticleSize = 0.500000000000000000
+    ColorInner.Color = {000000000000803F0000803F0000803F}
+    ColorOuter.Color = {0000803F0000803F0000803F0000803F}
+    LifeColors = <
+      item
+        LifeTime = 3.000000000000000000
+        SizeScale = 0.500000000000000000
+        RotateAngle = 0.300000011920929000
+      end>
+    Left = 224
+    Top = 136
+  end
+  object GLPointLightPFXManager3: TGLPointLightPFXManager
+    Cadencer = GLCadencer1
+    Renderer = rend
+    Friction = 1.000000000000000000
+    ColorMode = scmFade
+    ParticleSize = 0.500000000000000000
+    ColorInner.Color = {ACC8483ECDCC4C3FACC8483E0000803F}
+    ColorOuter.Color = {0000803F0000803F000000000000803F}
+    LifeColors = <
+      item
+        LifeTime = 1.000000000000000000
+        SizeScale = 1.000000000000000000
+      end>
+    Left = 224
+    Top = 208
+  end
+  object pfx2: TGLCustomSpritePFXManager
+    Cadencer = GLCadencer1
+    Renderer = rend
+    Friction = 1.000000000000000000
+    OnPrepareTextureImage = pfx2PrepareTextureImage
+    ColorMode = scmFade
+    ParticleSize = 0.750000000000000000
+    ColorInner.Color = {0000803F1283C03E000000000000803F}
+    LifeColors = <
+      item
+        ColorInner.Color = {0000003F0000003F0000000000000000}
+        LifeTime = 0.750000000000000000
+        SizeScale = 3.000000000000000000
+      end>
+    Left = 384
+    Top = 80
+  end
+  object pfx3: TGLCustomSpritePFXManager
+    Cadencer = GLCadencer1
+    Renderer = rend
+    Acceleration.Coordinates = {000000009A9999BE0000000000000000}
+    Friction = 1.000000000000000000
+    OnPrepareTextureImage = pfx3PrepareTextureImage
+    ParticleSize = 0.750000000000000000
+    ColorInner.Color = {0000803FAE47E13D7B142E3F0000803F}
+    LifeColors = <
+      item
+        ColorInner.Color = {CDCC4C3FACC8483E9A99193F00000000}
+        LifeTime = 0.750000000000000000
+        SizeScale = 3.000000000000000000
+        RotateAngle = 0.949999988079071000
+      end>
+    Left = 456
+    Top = 80
+  end
+  object GLPerlinPFXManager1: TGLPerlinPFXManager
+    Cadencer = GLCadencer1
+    Renderer = GLParticleFXRenderer1
+    Friction = 1.000000000000000000
+    Smoothness = 1.000000000000000000
+    Brightness = 1.000000000000000000
+    Gamma = 1.000000000000000000
+    ParticleSize = 1.000000000000000000
+    ColorInner.Color = {0000803F000000000000803F0000803F}
+    LifeColors = <
+      item
+        LifeTime = 3.000000000000000000
+        SizeScale = 1.000000000000000000
+      end>
+    Left = 552
+    Top = 80
+  end
+  object GLFireFXManager1: TGLFireFXManager
+    FireDir.Coordinates = {00000000000000BF0000000000000000}
+    InitialDir.Coordinates = {00000000000080BF0000000000000000}
+    Cadencer = GLCadencer1
+    ParticleSize = 0.250000000000000000
+    FireDensity = 1.000000000000000000
+    FireEvaporation = 0.860000014305114700
+    ParticleLife = 5
+    FireBurst = 1.000000000000000000
+    FireRadius = 0.250000000000000000
+    Disabled = False
+    Paused = False
+    ParticleInterval = 0.100000001490116100
+    UseInterval = True
+    Left = 672
+    Top = 80
+  end
+end

+ 181 - 0
Examples/Demos/specialsFX/PFXCursor/fPfxCursorD.pas

@@ -0,0 +1,181 @@
+unit fPfxCursorD;
+
+interface
+
+uses
+  Winapi.Windows,
+  Winapi.Messages,
+  System.SysUtils,
+  System.Variants,
+  System.Classes,
+  Vcl.Graphics,
+  Vcl.Controls,
+  Vcl.Forms,
+  Vcl.Dialogs,
+  Vcl.StdCtrls,
+  Vcl.ExtCtrls,
+
+  GLS.VectorTypes,
+  GLS.Cadencer,
+  GLS.Texture,
+  GLS.SceneViewer,
+  GLS.Scene,
+  GLS.VectorGeometry,
+  GLS.Graphics,
+  GLS.Keyboard,
+  GLS.ParticleFX,
+  GLS.Objects,
+  GLS.HUDObjects,
+  GLS.AsyncTimer,
+  GLS.PerlinPFX,
+  GLS.Material,
+  GLS.Coordinates,
+
+  GLS.BaseClasses,
+  GLS.FireFX,
+  GLS.GeomObjects,
+  GLS.Utils;
+
+type
+  TForm1 = class(TForm)
+    GLScene1: TGLScene;
+    GLMaterialLibrary1: TGLMaterialLibrary;
+    GLCadencer1: TGLCadencer;
+    pfx1: TGLPointLightPFXManager;
+    cur: TGLHUDSprite;
+    dc_cur: TGLDummyCube;
+    GLAsyncTimer1: TGLAsyncTimer;
+    rend: TGLParticleFXRenderer;
+    dc1: TGLDummyCube;
+    dc2: TGLDummyCube;
+    GLPointLightPFXManager2: TGLPointLightPFXManager;
+    GLPointLightPFXManager3: TGLPointLightPFXManager;
+    pfx2: TGLCustomSpritePFXManager;
+    vp: TGLSceneViewer;
+    dc3: TGLDummyCube;
+    pfx3: TGLCustomSpritePFXManager;
+    GLDummyCube3: TGLDummyCube;
+    GLCone1: TGLCone;
+    GLDummyCube1: TGLDummyCube;
+    GLCone2: TGLCone;
+    GLDummyCube2: TGLDummyCube;
+    Light1: TGLLightSource;
+    Panel1: TPanel;
+    RadioGroup1: TRadioGroup;
+    RadioGroup2: TRadioGroup;
+    GLCamera1: TGLCamera;
+    GLPerlinPFXManager1: TGLPerlinPFXManager;
+    GLFireFXManager1: TGLFireFXManager;
+    GLParticleFXRenderer1: TGLParticleFXRenderer;
+    stPerlin: TStaticText;
+    stFire: TStaticText;
+    procedure GLCadencer1Progress(Sender: TObject; const deltaTime, newTime: Double);
+    procedure pfx2PrepareTextureImage(Sender: TObject; destBmp32: TGLImage; var texFormat: Integer);
+    procedure pfx3PrepareTextureImage(Sender: TObject; destBmp32: TGLImage; var texFormat: Integer);
+    procedure GLAsyncTimer1Timer(Sender: TObject);
+    procedure FormShow(Sender: TObject);
+    procedure RadioGroup1Click(Sender: TObject);
+    procedure RadioGroup2Click(Sender: TObject);
+    procedure FormCreate(Sender: TObject);
+    procedure stPerlinClick(Sender: TObject);
+  public
+    Path: TFileName;
+  end;
+
+var
+  Form1: TForm1;
+
+implementation
+
+{$R *.dfm}
+
+
+procedure TForm1.FormCreate(Sender: TObject);
+begin
+  Path := GetCurrentAssetPath() + '\texture';
+  SetCurrentDir(Path);
+  cur.Material.Texture.Image.LoadFromFile('cur.bmp');
+end;
+
+
+procedure TForm1.GLCadencer1Progress;
+var
+  m: TPoint;
+  v: TGLVector;
+begin
+  with mouse.CursorPos do
+    cur.Position.SetPoint(x - left, y - top, 0);
+  cur.Rotation := cur.Rotation - deltaTime * 50;
+  v := cur.AbsolutePosition;
+  v.y := vp.Height - v.y;
+  vp.Buffer.ScreenVectorIntersectWithPlaneXY(v, 0, v);
+  dc_cur.AbsolutePosition := v;
+  dc1.Visible := IsKeyDown(VK_LBUTTON);
+  dc2.Visible := IsKeyDown(VK_RBUTTON);
+  dc3.Visible := IsKeyDown(VK_MBUTTON);
+  GLDummyCube3.Turn(1.5 * deltaTime * 60);
+end;
+
+//
+// skull
+//
+procedure TForm1.pfx2PrepareTextureImage;
+var
+  bmp: TBitmap;
+begin
+  bmp := TBitmap.Create;
+  bmp.LoadFromFile('skull.bmp');
+  destBmp32.Assign(bmp);
+  bmp.Free;
+end;
+
+//
+// rose
+//
+procedure TForm1.pfx3PrepareTextureImage;
+var
+  bmp: TBitmap;
+begin
+  bmp := TBitmap.Create;
+  bmp.LoadFromFile('rose.bmp');
+  destBmp32.Assign(bmp);
+  bmp.Free;
+end;
+
+procedure TForm1.RadioGroup1Click(Sender: TObject);
+begin
+  if RadioGroup1.ItemIndex = 0 then
+    GLFireFXManager1.Disabled := False
+  else
+    GLFireFXManager1.Disabled := True;
+end;
+
+procedure TForm1.RadioGroup2Click(Sender: TObject);
+begin
+  if RadioGroup2.ItemIndex = 0 then
+    GLPerlinPFXManager1.Renderer.Visible := True
+  else
+    GLPerlinPFXManager1.Renderer.Visible := False;
+end;
+
+procedure TForm1.stPerlinClick(Sender: TObject);
+begin
+
+end;
+
+//
+// fps
+//
+procedure TForm1.GLAsyncTimer1Timer(Sender: TObject);
+begin
+  caption := 'PFX Cursor Demo: ' + vp.FramesPerSecondText(2) +
+    ' / use the mouse left and right buttons';
+  vp.ResetPerformanceMonitor;
+end;
+
+procedure TForm1.FormShow(Sender: TObject);
+begin
+  GLCadencer1.Enabled := True;
+end;
+
+end.

+ 10 - 10
Examples/Demos/specialsFX/SpecialFX.groupproj

@@ -57,7 +57,7 @@
         <Projects Include="ParticleMasking\ParticleMaskingC.cbproj">
             <Dependencies/>
         </Projects>
-        <Projects Include="PFXCursor\PfxCursor.dproj">
+        <Projects Include="PFXCursor\PfxCursorD.dproj">
             <Dependencies/>
         </Projects>
         <Projects Include="PFXGallery\PFXGalleryD.dproj">
@@ -299,14 +299,14 @@
     <Target Name="ParticleMaskingC:Make">
         <MSBuild Projects="ParticleMasking\ParticleMaskingC.cbproj" Targets="Make"/>
     </Target>
-    <Target Name="PfxCursor">
-        <MSBuild Projects="PFXCursor\PfxCursor.dproj"/>
+    <Target Name="PfxCursorD">
+        <MSBuild Projects="PFXCursor\PfxCursorD.dproj"/>
     </Target>
-    <Target Name="PfxCursor:Clean">
-        <MSBuild Projects="PFXCursor\PfxCursor.dproj" Targets="Clean"/>
+    <Target Name="PfxCursorD:Clean">
+        <MSBuild Projects="PFXCursor\PfxCursorD.dproj" Targets="Clean"/>
     </Target>
-    <Target Name="PfxCursor:Make">
-        <MSBuild Projects="PFXCursor\PfxCursor.dproj" Targets="Make"/>
+    <Target Name="PfxCursorD:Make">
+        <MSBuild Projects="PFXCursor\PfxCursorD.dproj" Targets="Make"/>
     </Target>
     <Target Name="PFXGalleryD">
         <MSBuild Projects="PFXGallery\PFXGalleryD.dproj"/>
@@ -516,13 +516,13 @@
         <MSBuild Projects="waterplane\WaterPlaneC.cbproj" Targets="Make"/>
     </Target>
     <Target Name="Build">
-        <CallTarget Targets="AtmosphereD;AtmosphereC;BeerD;BeerC;BoomD;BoomC;CandlesD;CandlesC;FireD;FireC;MeshExplosionD;MeshExplosionC;MotionBlurD;MotionBlurC;MotionBlur2D;MotionBlur2C;ParticleMaskingD;ParticleMaskingC;PfxCursor;PFXGalleryD;PFXGalleryC;PostEffectD;PostEffectC;ProjTexturesD;ProjTexturesC;ShadowFBOD;ShadowFBOC;ShadowPlaneD;ShadowPlaneC;ShadowsD;ShadowsC;ShadowVolumesD;ShadowVolumesC;SpiralD;SpiralC;ThorD;ThorC;TrailsD;WarpingD;WarpingC;WaterPlaneD;WaterPlaneC"/>
+        <CallTarget Targets="AtmosphereD;AtmosphereC;BeerD;BeerC;BoomD;BoomC;CandlesD;CandlesC;FireD;FireC;MeshExplosionD;MeshExplosionC;MotionBlurD;MotionBlurC;MotionBlur2D;MotionBlur2C;ParticleMaskingD;ParticleMaskingC;PfxCursorD;PFXGalleryD;PFXGalleryC;PostEffectD;PostEffectC;ProjTexturesD;ProjTexturesC;ShadowFBOD;ShadowFBOC;ShadowPlaneD;ShadowPlaneC;ShadowsD;ShadowsC;ShadowVolumesD;ShadowVolumesC;SpiralD;SpiralC;ThorD;ThorC;TrailsD;WarpingD;WarpingC;WaterPlaneD;WaterPlaneC"/>
     </Target>
     <Target Name="Clean">
-        <CallTarget Targets="AtmosphereD:Clean;AtmosphereC:Clean;BeerD:Clean;BeerC:Clean;BoomD:Clean;BoomC:Clean;CandlesD:Clean;CandlesC:Clean;FireD:Clean;FireC:Clean;MeshExplosionD:Clean;MeshExplosionC:Clean;MotionBlurD:Clean;MotionBlurC:Clean;MotionBlur2D:Clean;MotionBlur2C:Clean;ParticleMaskingD:Clean;ParticleMaskingC:Clean;PfxCursor:Clean;PFXGalleryD:Clean;PFXGalleryC:Clean;PostEffectD:Clean;PostEffectC:Clean;ProjTexturesD:Clean;ProjTexturesC:Clean;ShadowFBOD:Clean;ShadowFBOC:Clean;ShadowPlaneD:Clean;ShadowPlaneC:Clean;ShadowsD:Clean;ShadowsC:Clean;ShadowVolumesD:Clean;ShadowVolumesC:Clean;SpiralD:Clean;SpiralC:Clean;ThorD:Clean;ThorC:Clean;TrailsD:Clean;WarpingD:Clean;WarpingC:Clean;WaterPlaneD:Clean;WaterPlaneC:Clean"/>
+        <CallTarget Targets="AtmosphereD:Clean;AtmosphereC:Clean;BeerD:Clean;BeerC:Clean;BoomD:Clean;BoomC:Clean;CandlesD:Clean;CandlesC:Clean;FireD:Clean;FireC:Clean;MeshExplosionD:Clean;MeshExplosionC:Clean;MotionBlurD:Clean;MotionBlurC:Clean;MotionBlur2D:Clean;MotionBlur2C:Clean;ParticleMaskingD:Clean;ParticleMaskingC:Clean;PfxCursorD:Clean;PFXGalleryD:Clean;PFXGalleryC:Clean;PostEffectD:Clean;PostEffectC:Clean;ProjTexturesD:Clean;ProjTexturesC:Clean;ShadowFBOD:Clean;ShadowFBOC:Clean;ShadowPlaneD:Clean;ShadowPlaneC:Clean;ShadowsD:Clean;ShadowsC:Clean;ShadowVolumesD:Clean;ShadowVolumesC:Clean;SpiralD:Clean;SpiralC:Clean;ThorD:Clean;ThorC:Clean;TrailsD:Clean;WarpingD:Clean;WarpingC:Clean;WaterPlaneD:Clean;WaterPlaneC:Clean"/>
     </Target>
     <Target Name="Make">
-        <CallTarget Targets="AtmosphereD:Make;AtmosphereC:Make;BeerD:Make;BeerC:Make;BoomD:Make;BoomC:Make;CandlesD:Make;CandlesC:Make;FireD:Make;FireC:Make;MeshExplosionD:Make;MeshExplosionC:Make;MotionBlurD:Make;MotionBlurC:Make;MotionBlur2D:Make;MotionBlur2C:Make;ParticleMaskingD:Make;ParticleMaskingC:Make;PfxCursor:Make;PFXGalleryD:Make;PFXGalleryC:Make;PostEffectD:Make;PostEffectC:Make;ProjTexturesD:Make;ProjTexturesC:Make;ShadowFBOD:Make;ShadowFBOC:Make;ShadowPlaneD:Make;ShadowPlaneC:Make;ShadowsD:Make;ShadowsC:Make;ShadowVolumesD:Make;ShadowVolumesC:Make;SpiralD:Make;SpiralC:Make;ThorD:Make;ThorC:Make;TrailsD:Make;WarpingD:Make;WarpingC:Make;WaterPlaneD:Make;WaterPlaneC:Make"/>
+        <CallTarget Targets="AtmosphereD:Make;AtmosphereC:Make;BeerD:Make;BeerC:Make;BoomD:Make;BoomC:Make;CandlesD:Make;CandlesC:Make;FireD:Make;FireC:Make;MeshExplosionD:Make;MeshExplosionC:Make;MotionBlurD:Make;MotionBlurC:Make;MotionBlur2D:Make;MotionBlur2C:Make;ParticleMaskingD:Make;ParticleMaskingC:Make;PfxCursorD:Make;PFXGalleryD:Make;PFXGalleryC:Make;PostEffectD:Make;PostEffectC:Make;ProjTexturesD:Make;ProjTexturesC:Make;ShadowFBOD:Make;ShadowFBOC:Make;ShadowPlaneD:Make;ShadowPlaneC:Make;ShadowsD:Make;ShadowsC:Make;ShadowVolumesD:Make;ShadowVolumesC:Make;SpiralD:Make;SpiralC:Make;ThorD:Make;ThorC:Make;TrailsD:Make;WarpingD:Make;WarpingC:Make;WaterPlaneD:Make;WaterPlaneC:Make"/>
     </Target>
     <Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/>
 </Project>

+ 2 - 1
Packages/_cleanpackages.cmd

@@ -55,7 +55,8 @@ attrib +R "AdvDemos/Q3Demo/Model/animation.cfg"
 rem del *.cfg /s  - there are quake's animations
 attrib -R "AdvDemos/Q3Demo/Model/animation.cfg"
 
-del *.res /s  - some apps load/save resources in RES files
+rem   - some apps load/save resources in RES files
+del *.res /s
 rem del *.ico /s  - some projects have own icos
 rem del *.cur /s  - cursors
 rem del *.obj /s  - obj models and resources for lazarus

+ 2 - 1
README.md

@@ -6,6 +6,7 @@ Additional support of CG, FMOD, BASS, ODE, NGD, CUDA/OpenCL, GR32, SDL2
 TensorFlow Lite and Tetgen is included.
 Supported GPU parallel computing using CUDA/OpenCL components. 
 
-This is the official GitHub fork of the original SourceForge repository. The latter can still be found at http://sf.net/projects/glscene
+This is the official GitHub fork of the original SourceForge repository. 
+The latter can still be found at http://sf.net/projects/glscene
 
 GLS Team

+ 1 - 1
Readme.txt

@@ -1,5 +1,5 @@
 The release of GLScene v.2023 for Delphi & C++Builder
-using Delphi Community Edition of Embarcadero RAD Studio.
+using Community Edition of Embarcadero RAD Studio.
 
 The version includes bug fixes, centralized access to assets for examples.
 Support for sound OpenAL, FMOD, BASS, WAVE and physical ODE, NGD libraries is provided

+ 0 - 1
Source/GLS.BumpmapHDS.pas

@@ -1,7 +1,6 @@
 //
 // The graphics platform GLScene https://github.com/glscene
 //
-
 unit GLS.BumpmapHDS;
 
 (*

+ 4 - 3
_cleanscene.cmd → _cleanforcpp.cmd

@@ -1,14 +1,15 @@
 @echo off delete exe and xml docs
-
 del *.exe /s  
 del *.scr /s
 del *.xml /s
 
-@echo off delete delphi units
+@echo off delete delphi units but not packages
+rem del *.bpl /s
+rem del *.dcp /s
 del *.dcu /s
 del *.bak /s
 
-@echo off delete C++ includes and libs
+@echo off not delete C++ includes and libs
 rem del *.hpp /s
 rem del *.bpi /s
 rem del *.lib /s

+ 86 - 0
_cleanfordelphi.cmd

@@ -0,0 +1,86 @@
+@echo off delete exe and xml docs
+del *.exe /s  
+del *.scr /s
+del *.xml /s
+
+@echo off delete delphi units and generated packages 
+del *.bpl /s
+del *.dcp /s
+del *.rsm /s
+del *.dcu /s
+del *.bak /s
+
+@echo off delete C++ includes and libs
+del *.hpp /s
+del *.bpi /s
+del *.lib /s
+
+@echo off delete debug files
+del *.ddp /s
+del *.ppu /s
+del *.o /s
+del *.~* /s
+del *.log /s
+del *.dsk /s
+del *.dof /s
+del *.bk? /s
+del *.mps /s
+del *.rst /s
+del *.s /s
+del *.a /s
+del *.map /s
+del *.drc /s
+del *.local /s
+
+@echo off delete more rad studio files
+
+del *.identcache /s
+del *.otares /s
+del *.tvsconfig /s
+del *.stat /s
+del *.db /s
+
+@echo off delete more cpp builder files
+
+del *.#00 /s
+del *.pch /s
+del *.tds /s
+del *.ilc /s
+del *.ild /s
+del *.ilf /s
+del *.ils /s
+del *.pdi /s
+del *.vlb /s
+
+echo ************************************************
+echo             Don't delete some files
+echo ************************************************
+
+attrib +R "AdvDemos/Q3Demo/Model/animation.cfg"
+rem del *.cfg /s - there are quake's animations
+attrib -R "AdvDemos/Q3Demo/Model/animation.cfg"
+
+rem del *.res /s  - some apps load/save resources in RES files
+rem del *.ico /s  - some projects have own icos
+rem del *.cur /s  - cursors
+rem del *.obj /s  - obj models in assets or resources for lazarus
+
+echo---------------------------------------------------------
+
+echo delete all .svn directories with subdirectories and files 
+for /r %1 %%R in (.svn) do if exist "%%R" (rd /s /q "%%R")
+echo delete all .git directories with subdirectories and files 
+for /r %1 %%R in (.git) do if exist "%%R" (rd /s /q "%%R")
+
+echo---------------------------------------------------------
+
+echo delete debug and Platform directories with all subdirectories and files 
+rem    for /r %1 %%R in (Win32) do if exist "%%R" (rd /s /q "%%R")
+rem    for /r %1 %%R in (Win64) do if exist "%%R" (rd /s /q "%%R")
+for /r %1 %%R in (Debug_Build) do if exist "%%R" (rd /s /q "%%R")
+for /r %1 %%R in (Debug) do if exist "%%R" (rd /s /q "%%R")
+for /r %1 %%R in (Release_Build) do if exist "%%R" (rd /s /q "%%R")
+for /r %1 %%R in (Release) do if exist "%%R" (rd /s /q "%%R")
+for /r %1 %%R in (__history) do if exist "%%R" (rd /s /q "%%R")
+for /r %1 %%R in (__recovery) do if exist "%%R" (rd /s /q "%%R")
+for /r %1 %%R in (__astcache) do if exist "%%R" (rd /s /q "%%R")