123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- unit fTexFormat;
- interface
- uses
- Winapi.OpenGL,
- System.SysUtils,
- System.Classes,
- Vcl.Graphics,
- Vcl.Controls,
- Vcl.Forms,
- Vcl.Dialogs,
- Vcl.StdCtrls,
- Vcl.ExtCtrls,
- Vcl.Imaging.Jpeg,
-
- GLS.Scene,
- GLS.VectorTypes,
- GLS.Objects,
- GLS.Texture,
- GLS.HUDObjects,
- GLS.Cadencer,
- GLS.SceneViewer,
- GLS.Coordinates,
-
- GLS.BaseClasses;
- type
- TFormTexFormat = class(TForm)
- GLSceneViewer1: TGLSceneViewer;
- GLScene1: TGLScene;
- GLCamera1: TGLCamera;
- Panel1: TPanel;
- CBFormat: TComboBox;
- Label2: TLabel;
- Label3: TLabel;
- CBCompression: TComboBox;
- Label4: TLabel;
- CBImage: TComboBox;
- LAPicSize: TLabel;
- Label5: TLabel;
- RBDefault: TRadioButton;
- RBDouble: TRadioButton;
- HUDSprite1: TGLHUDSprite;
- LAUsedMemory: TLabel;
- RBQuad: TRadioButton;
- LARGB32: TLabel;
- LACompression: TLabel;
- procedure FormCreate(Sender: TObject);
- procedure CBImageChange(Sender: TObject);
- procedure FormResize(Sender: TObject);
- procedure GLSceneViewer1AfterRender(Sender: TObject);
- private
-
- public
-
- newSelection: Boolean;
- end;
- var
- FormTexFormat: TFormTexFormat;
- implementation
- {$R *.DFM}
- uses
- GLS.TextureFormat, GLS.Utils;
- procedure TFormTexFormat.FormCreate(Sender: TObject);
- var
- sr: TSearchRec;
- i: Integer;
- begin
- SetGLSceneMediaDir();
- // collect JPeg textures from the demos' media directory
- i := FindFirst('*.jpg', faAnyFile, sr);
- while i = 0 do
- begin
- CBImage.Items.Add(sr.Name);
- i := FindNext(sr);
- end;
- FindClose(sr);
- // default selection
- CBFormat.ItemIndex := 0;
- CBCompression.ItemIndex := 0;
- CBImage.ItemIndex := 0;
- CBImageChange(Self);
- end;
- procedure TFormTexFormat.CBImageChange(Sender: TObject);
- begin
- // adjust settings from selection and reload the texture map
- with HUDSprite1.Material.Texture do
- begin
- TextureFormat := TGLTextureFormat(Integer(tfRGB) + CBFormat.ItemIndex);
- Compression := TGLTextureCompression(Integer(tcNone) +
- CBCompression.ItemIndex);
- Image.LoadFromFile(CBImage.Text);
- LAPicSize.Caption := IntToStr(Image.Width) + ' x ' + IntToStr(Image.Height);
- if RBDefault.Checked then
- begin
- HUDSprite1.Width := Image.Width;
- HUDSprite1.Height := Image.Height;
- end
- else if RBDouble.Checked then
- begin
- HUDSprite1.Width := Image.Width * 2;
- HUDSprite1.Height := Image.Height * 2;
- end
- else
- begin
- HUDSprite1.Width := Image.Width * 4;
- HUDSprite1.Height := Image.Height * 4;
- end;
- end;
- FormResize(Self);
- newSelection := True;
- end;
- procedure TFormTexFormat.FormResize(Sender: TObject);
- begin
- // re-center the HUDSprite
- HUDSprite1.Position.X := GLSceneViewer1.Width / 2;
- HUDSprite1.Position.Y := GLSceneViewer1.Height / 2;
- GLSceneViewer1.Invalidate;
- end;
- procedure TFormTexFormat.GLSceneViewer1AfterRender(Sender: TObject);
- var
- rgb: Integer;
- begin
- // update compression stats, only the 1st time after a new selection
- if newSelection then
- with HUDSprite1.Material.Texture do
- begin
- rgb := Image.Width * Image.Height * 4;
- LARGB32.Caption := Format('RGBA 32bits would require %d kB',
- [rgb div 1024]);
- LAUsedMemory.Caption := Format('Required memory : %d kB',
- [TextureImageRequiredMemory div 1024]);
- LACompression.Caption := Format('Compression ratio : %d %%',
- [100 - 100 * TextureImageRequiredMemory div rgb]);
- newSelection := False;
- end;
- end;
- end.
|