fTexFormat.pas 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. unit fTexFormat;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Classes,
  7. Vcl.Graphics,
  8. Vcl.Controls,
  9. Vcl.Forms,
  10. Vcl.Dialogs,
  11. Vcl.StdCtrls,
  12. Vcl.ExtCtrls,
  13. Vcl.Imaging.Jpeg,
  14. GLS.Scene,
  15. GLS.VectorTypes,
  16. GLS.Objects,
  17. GLS.Texture,
  18. GLS.HUDObjects,
  19. GLS.Cadencer,
  20. GLS.SceneViewer,
  21. GLS.Coordinates,
  22. GLS.BaseClasses;
  23. type
  24. TFormTexFormat = class(TForm)
  25. GLSceneViewer1: TGLSceneViewer;
  26. GLScene1: TGLScene;
  27. GLCamera1: TGLCamera;
  28. Panel1: TPanel;
  29. CBFormat: TComboBox;
  30. Label2: TLabel;
  31. Label3: TLabel;
  32. CBCompression: TComboBox;
  33. Label4: TLabel;
  34. CBImage: TComboBox;
  35. LAPicSize: TLabel;
  36. Label5: TLabel;
  37. RBDefault: TRadioButton;
  38. RBDouble: TRadioButton;
  39. HUDSprite1: TGLHUDSprite;
  40. LAUsedMemory: TLabel;
  41. RBQuad: TRadioButton;
  42. LARGB32: TLabel;
  43. LACompression: TLabel;
  44. procedure FormCreate(Sender: TObject);
  45. procedure CBImageChange(Sender: TObject);
  46. procedure FormResize(Sender: TObject);
  47. procedure GLSceneViewer1AfterRender(Sender: TObject);
  48. private
  49. public
  50. newSelection: Boolean;
  51. end;
  52. var
  53. FormTexFormat: TFormTexFormat;
  54. implementation
  55. {$R *.DFM}
  56. uses
  57. GLS.TextureFormat, GLS.Utils;
  58. procedure TFormTexFormat.FormCreate(Sender: TObject);
  59. var
  60. sr: TSearchRec;
  61. i: Integer;
  62. begin
  63. SetGLSceneMediaDir();
  64. // collect JPeg textures from the demos' media directory
  65. i := FindFirst('*.jpg', faAnyFile, sr);
  66. while i = 0 do
  67. begin
  68. CBImage.Items.Add(sr.Name);
  69. i := FindNext(sr);
  70. end;
  71. FindClose(sr);
  72. // default selection
  73. CBFormat.ItemIndex := 0;
  74. CBCompression.ItemIndex := 0;
  75. CBImage.ItemIndex := 0;
  76. CBImageChange(Self);
  77. end;
  78. procedure TFormTexFormat.CBImageChange(Sender: TObject);
  79. begin
  80. // adjust settings from selection and reload the texture map
  81. with HUDSprite1.Material.Texture do
  82. begin
  83. TextureFormat := TGLTextureFormat(Integer(tfRGB) + CBFormat.ItemIndex);
  84. Compression := TGLTextureCompression(Integer(tcNone) +
  85. CBCompression.ItemIndex);
  86. Image.LoadFromFile(CBImage.Text);
  87. LAPicSize.Caption := IntToStr(Image.Width) + ' x ' + IntToStr(Image.Height);
  88. if RBDefault.Checked then
  89. begin
  90. HUDSprite1.Width := Image.Width;
  91. HUDSprite1.Height := Image.Height;
  92. end
  93. else if RBDouble.Checked then
  94. begin
  95. HUDSprite1.Width := Image.Width * 2;
  96. HUDSprite1.Height := Image.Height * 2;
  97. end
  98. else
  99. begin
  100. HUDSprite1.Width := Image.Width * 4;
  101. HUDSprite1.Height := Image.Height * 4;
  102. end;
  103. end;
  104. FormResize(Self);
  105. newSelection := True;
  106. end;
  107. procedure TFormTexFormat.FormResize(Sender: TObject);
  108. begin
  109. // re-center the HUDSprite
  110. HUDSprite1.Position.X := GLSceneViewer1.Width / 2;
  111. HUDSprite1.Position.Y := GLSceneViewer1.Height / 2;
  112. GLSceneViewer1.Invalidate;
  113. end;
  114. procedure TFormTexFormat.GLSceneViewer1AfterRender(Sender: TObject);
  115. var
  116. rgb: Integer;
  117. begin
  118. // update compression stats, only the 1st time after a new selection
  119. if newSelection then
  120. with HUDSprite1.Material.Texture do
  121. begin
  122. rgb := Image.Width * Image.Height * 4;
  123. LARGB32.Caption := Format('RGBA 32bits would require %d kB',
  124. [rgb div 1024]);
  125. LAUsedMemory.Caption := Format('Required memory : %d kB',
  126. [TextureImageRequiredMemory div 1024]);
  127. LACompression.Caption := Format('Compression ratio : %d %%',
  128. [100 - 100 * TextureImageRequiredMemory div rgb]);
  129. newSelection := False;
  130. end;
  131. end;
  132. end.