fVertexGenD.pas 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. unit fVertexGenD;
  2. interface
  3. uses
  4. System.SysUtils,
  5. System.Variants,
  6. System.Classes,
  7. Vcl.Graphics,
  8. Vcl.Controls,
  9. Vcl.Forms,
  10. Vcl.Dialogs,
  11. GLS.Scene,
  12. GLScene.VectorTypes,
  13. GLScene.VectorGeometry,
  14. GLS.PipelineTransformation,
  15. GLS.Cadencer,
  16. GLS.SceneViewer,
  17. GLScene.BaseClasses,
  18. GLS.SimpleNavigation,
  19. GLS.Objects,
  20. GLScene.Coordinates,
  21. GLS.Context,
  22. CUDA.APIComps,
  23. CUDA.Compiler,
  24. CUDA.Context,
  25. CUDA.Graphics,
  26. GLS.Material,
  27. GLSL.CustomShader,
  28. GLSL.Shader;
  29. type
  30. TForm1 = class(TForm)
  31. GLScene1: TGLScene;
  32. GLSceneViewer1: TGLSceneViewer;
  33. GLCadencer1: TGLCadencer;
  34. GLCamera1: TGLCamera;
  35. GLDummyCube1: TGLDummyCube;
  36. GLSimpleNavigation1: TGLSimpleNavigation;
  37. GLCUDADevice1: TGLCUDADevice;
  38. GLCUDA1: TGLCUDA;
  39. GLCUDACompiler1: TGLCUDACompiler;
  40. MainModule: TCUDAModule;
  41. DotFieldMapper: TCUDAGeometryResource;
  42. GLSLShader1: TGLSLShader;
  43. MakeDotField: TCUDAFunction;
  44. CUDAFeedbackMesh1: TCUDAFeedbackMesh;
  45. procedure GLCadencer1Progress(Sender: TObject;
  46. const deltaTime, newTime: Double);
  47. procedure MakeVertexBufferParameterSetup(Sender: TObject);
  48. procedure FormCreate(Sender: TObject);
  49. procedure GLSLShader1Apply(Shader: TGLCustomGLSLShader);
  50. procedure GLCUDA1OpenGLInteropInit(out Context: TGLContext);
  51. public
  52. FieldWidth: Integer;
  53. FieldHeight: Integer;
  54. end;
  55. var
  56. Form1: TForm1;
  57. implementation
  58. {$R *.dfm}
  59. procedure TForm1.FormCreate(Sender: TObject);
  60. begin
  61. FieldWidth := 256;
  62. FieldHeight := 256;
  63. CUDAFeedbackMesh1.VertexNumber := FieldWidth * FieldHeight;
  64. CUDAFeedbackMesh1.Visible := True;
  65. MakeDotField.Grid.SizeX := FieldWidth div MakeDotField.BlockShape.SizeX;
  66. MakeDotField.Grid.SizeY := FieldWidth div MakeDotField.BlockShape.SizeY;
  67. end;
  68. procedure TForm1.GLCUDA1OpenGLInteropInit(out Context: TGLContext);
  69. begin
  70. Context := GLSceneViewer1.Buffer.RenderingContext;
  71. end;
  72. procedure TForm1.GLSLShader1Apply(Shader: TGLCustomGLSLShader);
  73. begin
  74. with GLSceneViewer1.Buffer.RenderingContext.PipelineTransformation do
  75. Shader.Param['ModelViewProjectionMatrix'].AsMatrix4f :=
  76. MatrixMultiply(ModelViewMatrix^, ProjectionMatrix^);
  77. end;
  78. procedure TForm1.MakeVertexBufferParameterSetup(Sender: TObject);
  79. begin
  80. with MakeDotField do
  81. begin
  82. SetParam(DotFieldMapper.AttributeDataAddress[CUDAFeedbackMesh1.Attributes[0].Name]);
  83. SetParam(FieldWidth);
  84. SetParam(FieldHeight);
  85. SetParam(GLCadencer1.CurrentTime);
  86. end;
  87. end;
  88. procedure TForm1.GLCadencer1Progress(Sender: TObject;
  89. const deltaTime, newTime: Double);
  90. begin
  91. GLSceneViewer1.Invalidate;
  92. end;
  93. end.