0031478: Visualization, TKOpenGl - allow uploading Cubemap in compressed DDS format...
[occt.git] / src / Image / Image_DDSParser.hxx
1 // Copyright (c) 2020 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14 #ifndef _Image_DDSParser_HeaderFile
15 #define _Image_DDSParser_HeaderFile
16
17 #include <Image_CompressedPixMap.hxx>
18 #include <NCollection_Buffer.hxx>
19
20 class Image_SupportedFormats;
21
22 //! Auxiliary tool for parsing DDS file structure (without decoding).
23 class Image_DDSParser
24 {
25 public:
26
27   //! Load the face from DDS file.
28   //! @param theSupported [in] list of supported image formats
29   //! @param theFile      [in] file path
30   //! @param theFaceIndex [in] face index, within [0, Image_CompressedPixMap::NbFaces()) range;
31   //!                          use -1 to skip reading the face data
32   //! @param theFileOffset [in] offset to the DDS data
33   //! @return loaded face or NULL if file cannot be read or not valid DDS file
34   Standard_EXPORT static Handle(Image_CompressedPixMap) Load (const Handle(Image_SupportedFormats)& theSupported,
35                                                               const TCollection_AsciiString& theFile,
36                                                               const Standard_Integer theFaceIndex,
37                                                               const int64_t theFileOffset = 0);
38
39   //! Load the face from DDS file.
40   //! @param theSupported [in] list of supported image formats
41   //! @param theBuffer    [in] pre-loaded file data, should be at least of 128 bytes long defining DDS header.
42   //! @param theFaceIndex [in] face index, within [0, Image_CompressedPixMap::NbFaces()) range;
43   //!                          use -1 to skip reading the face data
44   //! @return loaded face or NULL if file cannot be read or not valid DDS file
45   Standard_EXPORT static Handle(Image_CompressedPixMap) Load (const Handle(Image_SupportedFormats)& theSupported,
46                                                               const Handle(NCollection_Buffer)& theBuffer,
47                                                               const Standard_Integer theFaceIndex);
48
49   
50 private:
51
52   struct DDSPixelFormat;
53   struct DDSFileHeader;
54
55 private:
56
57   //! Parse DDS header.
58   static Handle(Image_CompressedPixMap) parseHeader (const DDSFileHeader& theHeader);
59
60 };
61
62 #endif // _Image_DDSParser_HeaderFile