fMultiTextures.pas 3.8 KB

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