GlsScriptFm.pas 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. unit GlsScriptFm;
  2. interface
  3. uses
  4. Winapi.Windows,
  5. Winapi.Messages,
  6. Winapi.OpenGL,
  7. Winapi.OpenGLext,
  8. System.SysUtils,
  9. System.Classes,
  10. Vcl.Graphics,
  11. Vcl.Controls,
  12. Vcl.Forms,
  13. Vcl.Dialogs,
  14. Vcl.StdCtrls,
  15. Vcl.ExtCtrls,
  16. GLS.Objects,
  17. GLS.SceneViewer,
  18. GLS.Scene,
  19. GLS.Texture,
  20. GLS.Cadencer,
  21. GLS.AsyncTimer,
  22. GLS.BitmapFont,
  23. GLS.WindowsFont,
  24. GLS.HUDObjects,
  25. GLS.Coordinates,
  26. GLS.BaseClasses,
  27. GLS.RenderContextInfo,
  28. DWS.Sript,
  29. DWS.OpenGL,
  30. DWS.Objects,
  31. DWS.VectorGeometry,
  32. dwsExprs,
  33. dwsComp;
  34. type
  35. TForm1 = class(TForm)
  36. GLDelphiWebScriptII1: TGLDelphiWebScript;
  37. dws2OpenGLxUnit1: TdwsOpenGLxUnit;
  38. GLScene1: TGLScene;
  39. GLSceneViewer1: TGLSceneViewer;
  40. GLCamera1: TGLCamera;
  41. GLLightSource1: TGLLightSource;
  42. GLDirectOpenGL1: TGLDirectOpenGL;
  43. GLDummyCube1: TGLDummyCube;
  44. GLCadencer1: TGLCadencer;
  45. AsyncTimer1: TGLAsyncTimer;
  46. GLHUDText1: TGLHUDText;
  47. GLWindowsBitmapFont1: TGLWindowsBitmapFont;
  48. Panel2: TPanel;
  49. CompileButton: TButton;
  50. Script: TMemo;
  51. dws2VectorGeometryUnit1: TdwsVectorGeometryUnit;
  52. procedure FormCreate(Sender: TObject);
  53. procedure FormDestroy(Sender: TObject);
  54. procedure GLDirectOpenGL1Render(Sender: TObject;
  55. var rci: TGLRenderContextInfo);
  56. procedure GLSceneViewer1MouseDown(Sender: TObject;
  57. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  58. procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
  59. X, Y: Integer);
  60. procedure GLCadencer1Progress(Sender: TObject; const deltaTime,
  61. newTime: Double);
  62. procedure AsyncTimer1Timer(Sender: TObject);
  63. procedure CompileButtonClick(Sender: TObject);
  64. private
  65. public
  66. mx, my : Integer;
  67. Prog : TProgram;
  68. Errors : Boolean;
  69. end;
  70. var
  71. Form1: TForm1;
  72. implementation
  73. {$R *.dfm}
  74. uses
  75. GLS.Context;
  76. procedure TForm1.FormCreate(Sender: TObject);
  77. begin
  78. CompileButtonClick(Self);
  79. end;
  80. procedure TForm1.FormDestroy(Sender: TObject);
  81. begin
  82. Prog.Free;
  83. end;
  84. procedure TForm1.CompileButtonClick(Sender: TObject);
  85. begin
  86. Prog.Free;
  87. Prog:=GLDelphiWebScriptII1.Compile(Script.Text);
  88. Errors:=False;
  89. GLDirectOpenGL1.Visible:=True;
  90. GLDirectOpenGL1.StructureChanged;
  91. end;
  92. procedure TForm1.GLDirectOpenGL1Render(Sender: TObject;
  93. var rci: TGLRenderContextInfo);
  94. begin
  95. if Errors then exit;
  96. try
  97. Prog.Execute;
  98. CheckOpenGLError;
  99. except
  100. on E : Exception do begin
  101. GLHUDText1.ModulateColor.AsWinColor:=clRed;
  102. GLHUDText1.Text:='Error: '+E.Message;
  103. Errors:=True;
  104. GLDirectOpenGL1.Visible:=False;
  105. Exit;
  106. end;
  107. end;
  108. Errors:=False;
  109. end;
  110. procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject;
  111. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  112. begin
  113. mx:=x;
  114. my:=y;
  115. end;
  116. procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject;
  117. Shift: TShiftState; X, Y: Integer);
  118. begin
  119. if ssLeft in Shift then
  120. GLCamera1.MoveAroundTarget(my-y, mx-x);
  121. mx:=x;
  122. my:=y;
  123. end;
  124. procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
  125. newTime: Double);
  126. begin
  127. GLDirectOpenGL1.Turn(20*deltaTime);
  128. end;
  129. procedure TForm1.AsyncTimer1Timer(Sender: TObject);
  130. begin
  131. if not Errors then begin
  132. GLHUDText1.ModulateColor.AsWinColor:=clNavy;
  133. GLHUDText1.Text:=GLSceneViewer1.FramesPerSecondText;
  134. end;
  135. GLSceneViewer1.ResetPerformanceMonitor;
  136. end;
  137. end.