DwsShaderFm.pas 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. unit DwsShaderFm;
  2. interface
  3. uses
  4. Winapi.Windows,
  5. Winapi.Messages,
  6. System.SysUtils,
  7. System.Classes,
  8. Vcl.Graphics,
  9. Vcl.Controls,
  10. Vcl.Forms,
  11. Vcl.Dialogs,
  12. Vcl.ExtCtrls,
  13. Vcl.StdCtrls,
  14. GLS.Cadencer,
  15. GLS.Texture,
  16. GLSL.UserShader,
  17. GLS.SceneViewer,
  18. GLS.Scene,
  19. GLS.Objects,
  20. GLS.AsyncTimer,
  21. GLS.Material,
  22. GLS.Coordinates,
  23. GLS.BaseClasses,
  24. GLS.RenderContextInfo,
  25. GLS.ScriptBase,
  26. DWSs.Script,
  27. DWSs.OpenGL,
  28. DWSs.VectorGeometry,
  29. dwsComp;
  30. type
  31. TForm1 = class(TForm)
  32. GLScene1: TGLScene;
  33. GLSceneViewer1: TGLSceneViewer;
  34. Panel1: TPanel;
  35. dwsOpenGLxUnit1: TdwsOpenGLxUnit;
  36. GLUserShader1: TGLUserShader;
  37. ShaderScript: TMemo;
  38. Recompile: TButton;
  39. Enabled: TCheckBox;
  40. Label1: TLabel;
  41. GLCadencer1: TGLCadencer;
  42. GLCamera1: TGLCamera;
  43. GLDummyCube1: TGLDummyCube;
  44. GLLightSource1: TGLLightSource;
  45. GLCube1: TGLCube;
  46. GLMaterialLibrary1: TGLMaterialLibrary;
  47. dws2VectorGeometryUnit1: TdwsVectorGeometryUnit;
  48. AsyncTimer1: TGLAsyncTimer;
  49. GLDelphiWebScriptII1: TGLDelphiWebScript;
  50. GLScriptLibrary1: TGLScriptLibrary;
  51. procedure GLCadencer1Progress(Sender: TObject; const deltaTime,
  52. newTime: Double);
  53. procedure RecompileClick(Sender: TObject);
  54. procedure FormCreate(Sender: TObject);
  55. procedure GLUserShader1DoApply(Sender: TObject;
  56. var rci: TGLRenderContextInfo);
  57. procedure GLUserShader1DoUnApply(Sender: TObject; Pass: Integer;
  58. var rci: TGLRenderContextInfo; var Continue: Boolean);
  59. procedure EnabledClick(Sender: TObject);
  60. procedure AsyncTimer1Timer(Sender: TObject);
  61. procedure GLSceneViewer1MouseDown(Sender: TObject;
  62. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  63. procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
  64. X, Y: Integer);
  65. private
  66. public
  67. mx, my : Integer;
  68. Compiled : Boolean;
  69. end;
  70. var
  71. Form1: TForm1;
  72. implementation
  73. {$R *.dfm}
  74. procedure TForm1.FormCreate(Sender: TObject);
  75. begin
  76. ShaderScript.Lines.AddStrings(GLScriptLibrary1.Scripts[0].Text);
  77. // Compile the program when the form is created
  78. RecompileClick(nil);
  79. end;
  80. procedure TForm1.RecompileClick(Sender: TObject);
  81. begin
  82. with GLScriptLibrary1.Scripts[0] do begin;
  83. // Assign the script text from the memo
  84. Text.Clear;
  85. Text.AddStrings(ShaderScript.Lines);
  86. // Compile/Recompiler and then start the script
  87. Compile;
  88. Start;
  89. end;
  90. end;
  91. procedure TForm1.GLUserShader1DoApply(Sender: TObject;
  92. var rci: TGLRenderContextInfo);
  93. begin
  94. // Call the scripted DoApply procedure to handle the shader application
  95. GLScriptLibrary1.Scripts[0].Call('DoApply',[]);
  96. end;
  97. procedure TForm1.GLUserShader1DoUnApply(Sender: TObject; Pass: Integer;
  98. var rci: TGLRenderContextInfo; var Continue: Boolean);
  99. begin
  100. // Call the scripted DoUnApply function to handle the shader unapplication
  101. // pass the result of the scripted function to the Continue variable
  102. Continue:=GLScriptLibrary1.Scripts[0].Call('DoUnApply',[Pass]);
  103. end;
  104. procedure TForm1.EnabledClick(Sender: TObject);
  105. begin
  106. GLUserShader1.Enabled:=Enabled.Checked;
  107. end;
  108. procedure TForm1.AsyncTimer1Timer(Sender: TObject);
  109. begin
  110. Form1.Caption:=GLSceneViewer1.FramesPerSecondText;
  111. GLSceneViewer1.ResetPerformanceMonitor;
  112. end;
  113. procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject;
  114. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  115. begin
  116. mx:=x;
  117. my:=y;
  118. end;
  119. procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject;
  120. Shift: TShiftState; X, Y: Integer);
  121. begin
  122. if ssLeft in Shift then
  123. GLCamera1.MoveAroundTarget(my-y, mx-x);
  124. mx:=x;
  125. my:=y;
  126. end;
  127. procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
  128. newTime: Double);
  129. begin
  130. GLSceneViewer1.Invalidate;
  131. end;
  132. end.