fMultiTexturesD.pas 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. unit fMultiTexturesD;
  2. interface
  3. uses
  4. Winapi.Windows,
  5. Winapi.OpenGL,
  6. System.SysUtils,
  7. System.Classes,
  8. Vcl.Controls,
  9. Vcl.Forms,
  10. Vcl.Dialogs,
  11. Vcl.StdCtrls,
  12. Vcl.ExtCtrls,
  13. Stage.VectorGeometry,
  14. Stage.Keyboard,
  15. Stage.VectorTypes,
  16. GLS.Scene,
  17. GLS.Objects,
  18. GLS.SceneViewer,
  19. GLS.Coordinates,
  20. GLS.BaseClasses,
  21. GLS.BitmapFont,
  22. GLS.WindowsFont,
  23. GLSL.Shader,
  24. GLSL.CustomShader,
  25. GLS.Material,
  26. GLS.Cadencer,
  27. GLS.HUDObjects,
  28. GLS.GeomObjects,
  29. GLS.FBORenderer,
  30. GLS.Texture,
  31. GLS.SimpleNavigation,
  32. GLS.State,
  33. GLS.Context,
  34. GLS.XCollection,
  35. GLS.MultiSampleImage;
  36. type
  37. TFormMultiSampleTextures = class(TForm)
  38. MainScene: TGLScene;
  39. MainCamera: TGLCamera;
  40. MainCadencer: TGLCadencer;
  41. MainMaterialLibrary: TGLMaterialLibrary;
  42. SceneObjects: TGLDummyCube;
  43. MainViewer: TGLSceneViewer;
  44. TestLight: TGLLightSource;
  45. MultisampleFBO: TGLFBORenderer;
  46. GLSLShader1: TGLSLShader;
  47. GLSimpleNavigation1: TGLSimpleNavigation;
  48. GLScreenQuad: TGLHUDSprite;
  49. GLSphere1: TGLSphere;
  50. GLTorus1: TGLTorus;
  51. GLTorus2: TGLTorus;
  52. GLCone1: TGLCone;
  53. GLLines1: TGLLines;
  54. FBOContainer: TGLDummyCube;
  55. GLHUDText1: TGLHUDText;
  56. GLWindowsBitmapFont1: TGLWindowsBitmapFont;
  57. procedure FormCreate(Sender: TObject);
  58. procedure MainCadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
  59. procedure FormResize(Sender: TObject);
  60. procedure GLSLShader1Apply(Shader: TGLCustomGLSLShader);
  61. procedure MainViewerBeforeRender(Sender: TObject);
  62. end;
  63. var
  64. FormMultiSampleTextures: TFormMultiSampleTextures;
  65. implementation
  66. {$R *.dfm}
  67. procedure TFormMultiSampleTextures.FormCreate(Sender: TObject);
  68. begin
  69. MainMaterialLibrary.TextureByName('MultisampledColor').ImageClassName := 'TGLMultisampleImage';
  70. TGLMultiSampleImage(MainMaterialLibrary.TextureByName('MultisampledColor').Image).SamplesCount := 16;
  71. MainMaterialLibrary.TextureByName('Depth').ImageClassName := 'TGLMultisampleImage';
  72. TGLMultiSampleImage(MainMaterialLibrary.TextureByName('Depth').Image).SamplesCount := 16;
  73. GLSLShader1.Enabled := True;
  74. GLHUDText1.Text := 'Press F1/F2 to switch multisampling' + #10#13 +
  75. 'F3/F4 - Wireframe mode';
  76. end;
  77. procedure TFormMultiSampleTextures.MainCadencerProgress(Sender: TObject; const deltaTime,
  78. newTime: Double);
  79. begin
  80. if IsKeyDown(VK_F2) then
  81. begin
  82. FBOContainer.Visible := false;
  83. GLScreenQuad.Visible := false;
  84. SceneObjects.Visible := true;
  85. end;
  86. if IsKeyDown(VK_F1) then
  87. begin
  88. FBOContainer.Visible := true;
  89. GLScreenQuad.Visible := true;
  90. SceneObjects.Visible := false;
  91. end;
  92. if IsKeyDown(VK_F3) then
  93. begin
  94. GLTorus1.Material.PolygonMode := pmLines;
  95. GLTorus2.Material.PolygonMode := pmLines;
  96. GLCone1.Material.PolygonMode := pmLines;
  97. end;
  98. if IsKeyDown(VK_F4) then
  99. begin
  100. GLTorus1.Material.PolygonMode := pmFill;
  101. GLTorus2.Material.PolygonMode := pmFill;
  102. GLCone1.Material.PolygonMode := pmFill;
  103. end;
  104. MainViewer.Invalidate();
  105. end;
  106. procedure TFormMultiSampleTextures.FormResize(Sender: TObject);
  107. begin
  108. MultisampleFBO.Width := MainViewer.Width;
  109. MultisampleFBO.Height := MainViewer.Height;
  110. GLScreenQuad.Width := MainViewer.Width;
  111. GLScreenQuad.Height := MainViewer.Height;
  112. GLScreenQuad.Position.SetPoint(
  113. MainViewer.Width div 2,
  114. MainViewer.Height div 2, 0);
  115. end;
  116. procedure TFormMultiSampleTextures.GLSLShader1Apply(Shader: TGLCustomGLSLShader);
  117. begin
  118. Shader.Param['TexUnit0'].AsTexture[0] :=
  119. MainMaterialLibrary.TextureByName('MultisampledColor');
  120. Shader.Param['ViewerSize'].AsVector2f :=
  121. Vector2fMake(MainViewer.Width, MainViewer.Height);
  122. end;
  123. procedure TFormMultiSampleTextures.MainViewerBeforeRender(Sender: TObject);
  124. begin
  125. if not gl.EXT_framebuffer_multisample then
  126. begin
  127. ShowMessage
  128. ('Sorry, your hardware do not support Multisampling');
  129. Close;
  130. end;
  131. end;
  132. end.