fTexFormatD.pas 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. unit fTexFormatD;
  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. Scenario.TextureFormat, GLS.Utils;
  58. procedure TFormTexFormat.FormCreate(Sender: TObject);
  59. var
  60. sr: TSearchRec;
  61. i: Integer;
  62. begin
  63. var Path: TFileName := GetCurrentAssetPath();
  64. SetCurrentDir(Path + '\texture');
  65. // collect JPeg textures from the asset directory
  66. i := FindFirst('*.jpg', faAnyFile, sr);
  67. while i = 0 do
  68. begin
  69. CBImage.Items.Add(sr.Name);
  70. i := FindNext(sr);
  71. end;
  72. FindClose(sr);
  73. // default selection
  74. CBFormat.ItemIndex := 0;
  75. CBCompression.ItemIndex := 0;
  76. CBImage.ItemIndex := 0;
  77. CBImageChange(Self);
  78. end;
  79. procedure TFormTexFormat.CBImageChange(Sender: TObject);
  80. begin
  81. // adjust settings from selection and reload the texture map
  82. with HUDSprite1.Material.Texture do
  83. begin
  84. TextureFormat := TGLTextureFormat(Integer(tfRGB) + CBFormat.ItemIndex);
  85. Compression := TGLTextureCompression(Integer(tcNone) +
  86. CBCompression.ItemIndex);
  87. Image.LoadFromFile(CBImage.Text);
  88. LAPicSize.Caption := IntToStr(Image.Width) + ' x ' + IntToStr(Image.Height);
  89. if RBDefault.Checked then
  90. begin
  91. HUDSprite1.Width := Image.Width;
  92. HUDSprite1.Height := Image.Height;
  93. end
  94. else if RBDouble.Checked then
  95. begin
  96. HUDSprite1.Width := Image.Width * 2;
  97. HUDSprite1.Height := Image.Height * 2;
  98. end
  99. else
  100. begin
  101. HUDSprite1.Width := Image.Width * 4;
  102. HUDSprite1.Height := Image.Height * 4;
  103. end;
  104. end;
  105. FormResize(Self);
  106. newSelection := True;
  107. end;
  108. procedure TFormTexFormat.FormResize(Sender: TObject);
  109. begin
  110. // re-center the HUDSprite
  111. HUDSprite1.Position.X := GLSceneViewer1.Width / 2;
  112. HUDSprite1.Position.Y := GLSceneViewer1.Height / 2;
  113. GLSceneViewer1.Invalidate;
  114. end;
  115. procedure TFormTexFormat.GLSceneViewer1AfterRender(Sender: TObject);
  116. var
  117. rgb: Integer;
  118. begin
  119. // update compression stats, only the 1st time after a new selection
  120. if newSelection then
  121. with HUDSprite1.Material.Texture do
  122. begin
  123. rgb := Image.Width * Image.Height * 4;
  124. LARGB32.Caption := Format('RGBA 32bits would require %d kB',
  125. [rgb div 1024]);
  126. LAUsedMemory.Caption := Format('Required memory : %d kB',
  127. [TextureImageRequiredMemory div 1024]);
  128. LACompression.Caption := Format('Compression ratio : %d %%',
  129. [100 - 100 * TextureImageRequiredMemory div rgb]);
  130. newSelection := False;
  131. end;
  132. end;
  133. end.