| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- unit DwsShaderFm;
- interface
- uses
- Winapi.Windows,
- Winapi.Messages,
- System.SysUtils,
- System.Classes,
- Vcl.Graphics,
- Vcl.Controls,
- Vcl.Forms,
- Vcl.Dialogs,
- Vcl.ExtCtrls,
- Vcl.StdCtrls,
-
- GLS.Cadencer,
- GLS.Texture,
- GLSL.UserShader,
- GLS.SceneViewer,
- GLS.Scene,
- GLS.Objects,
- GLS.AsyncTimer,
- GLS.Material,
- GLS.Coordinates,
-
- GLS.BaseClasses,
- GLS.RenderContextInfo,
- GLS.ScriptBase,
- DWSs.Script,
- DWSs.OpenGL,
- DWSs.VectorGeometry,
- dwsComp;
- type
- TForm1 = class(TForm)
- GLScene1: TGLScene;
- GLSceneViewer1: TGLSceneViewer;
- Panel1: TPanel;
- dwsOpenGLxUnit1: TdwsOpenGLxUnit;
- GLUserShader1: TGLUserShader;
- ShaderScript: TMemo;
- Recompile: TButton;
- Enabled: TCheckBox;
- Label1: TLabel;
- GLCadencer1: TGLCadencer;
- GLCamera1: TGLCamera;
- GLDummyCube1: TGLDummyCube;
- GLLightSource1: TGLLightSource;
- GLCube1: TGLCube;
- GLMaterialLibrary1: TGLMaterialLibrary;
- dws2VectorGeometryUnit1: TdwsVectorGeometryUnit;
- AsyncTimer1: TGLAsyncTimer;
- GLDelphiWebScriptII1: TGLDelphiWebScript;
- GLScriptLibrary1: TGLScriptLibrary;
- procedure GLCadencer1Progress(Sender: TObject; const deltaTime,
- newTime: Double);
- procedure RecompileClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure GLUserShader1DoApply(Sender: TObject;
- var rci: TGLRenderContextInfo);
- procedure GLUserShader1DoUnApply(Sender: TObject; Pass: Integer;
- var rci: TGLRenderContextInfo; var Continue: Boolean);
- procedure EnabledClick(Sender: TObject);
- procedure AsyncTimer1Timer(Sender: TObject);
- procedure GLSceneViewer1MouseDown(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
- X, Y: Integer);
- private
- public
-
- mx, my : Integer;
- Compiled : Boolean;
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- ShaderScript.Lines.AddStrings(GLScriptLibrary1.Scripts[0].Text);
- // Compile the program when the form is created
- RecompileClick(nil);
- end;
- procedure TForm1.RecompileClick(Sender: TObject);
- begin
- with GLScriptLibrary1.Scripts[0] do begin;
- // Assign the script text from the memo
- Text.Clear;
- Text.AddStrings(ShaderScript.Lines);
- // Compile/Recompiler and then start the script
- Compile;
- Start;
- end;
- end;
- procedure TForm1.GLUserShader1DoApply(Sender: TObject;
- var rci: TGLRenderContextInfo);
- begin
- // Call the scripted DoApply procedure to handle the shader application
- GLScriptLibrary1.Scripts[0].Call('DoApply',[]);
- end;
- procedure TForm1.GLUserShader1DoUnApply(Sender: TObject; Pass: Integer;
- var rci: TGLRenderContextInfo; var Continue: Boolean);
- begin
- // Call the scripted DoUnApply function to handle the shader unapplication
- // pass the result of the scripted function to the Continue variable
- Continue:=GLScriptLibrary1.Scripts[0].Call('DoUnApply',[Pass]);
- end;
- procedure TForm1.EnabledClick(Sender: TObject);
- begin
- GLUserShader1.Enabled:=Enabled.Checked;
- end;
- procedure TForm1.AsyncTimer1Timer(Sender: TObject);
- begin
- Form1.Caption:=GLSceneViewer1.FramesPerSecondText;
- GLSceneViewer1.ResetPerformanceMonitor;
- end;
- procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- begin
- mx:=x;
- my:=y;
- end;
- procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject;
- Shift: TShiftState; X, Y: Integer);
- begin
- if ssLeft in Shift then
- GLCamera1.MoveAroundTarget(my-y, mx-x);
- mx:=x;
- my:=y;
- end;
- procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
- newTime: Double);
- begin
- GLSceneViewer1.Invalidate;
- end;
- end.
|