| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //
- // This unit is part of the GLScene Engine, http://glscene.org
- //
- (*
- Good to preview pictures in OpenDialog,
- so you may include both O3TCImage (preview) and GLFileO3TC (loading)
- *)
- unit FileO3TCImage;
- interface
- {$I GLScene.inc}
- uses
- Winapi.Windows,
- System.Classes,
- System.SysUtils,
- Vcl.Graphics,
- OpenGLTokens,
- GLVectorGeometry,
- GLGraphics;
- type
- TO3TCImage = class(TBitmap)
- public
- procedure LoadFromStream(stream: TStream); override;
- procedure SaveToStream(stream: TStream); override;
- end;
- //--------------------------------------------------
- implementation
- //--------------------------------------------------
- uses
- GLFileO3TC,
- GLTextureFormat;
- // ------------------
- // ------------------ TO3TCImage ------------------
- // ------------------
- procedure TO3TCImage.LoadFromStream(stream: TStream);
- var
- FullO3TC: TGLO3TCImage;
- src, dst: PGLubyte;
- y: Integer;
- begin
- FullO3TC := TGLO3TCImage.Create;
- try
- FullO3TC.LoadFromStream(stream);
- except
- FullO3TC.Free;
- raise;
- end;
- FullO3TC.Narrow;
- Width := FullO3TC.LevelWidth[0];
- Height := FullO3TC.LevelHeight[0];
- Transparent := true;
- PixelFormat := pf32bit;
- src := PGLubyte(FullO3TC.Data);
- for y := 0 to Height - 1 do
- begin
- dst := ScanLine[Height - 1 - y];
- BGRA32ToRGBA32(src, dst, Width);
- Inc(src, Width * 4);
- end;
- FullO3TC.Free;
- end;
- procedure TO3TCImage.SaveToStream(stream: TStream);
- begin
- Assert(False, 'Not supported');
- end;
- // ------------------------------------------------------------------
- initialization
- // ------------------------------------------------------------------
- TPicture.RegisterFileFormat(
- 'o3tc', 'oZone3D Texture Compression', TO3TCImage);
- // ------------------------------------------------------------------
- finalization
- // ------------------------------------------------------------------
- TPicture.UnregisterGraphicClass(TO3TCImage);
- end.
|