1 // Copyright (C) 2002-2012 Nikolaus Gebhardt
2 // This file is part of the "Irrlicht Engine".
3 // For conditions of distribution and use, see copyright notice in irrlicht.h
4 
5 #ifndef __C_IMAGE_LOADER_TGA_H_INCLUDED__
6 #define __C_IMAGE_LOADER_TGA_H_INCLUDED__
7 
8 #include "IrrCompileConfig.h"
9 
10 #include "IImageLoader.h"
11 
12 
13 namespace irr
14 {
15 namespace video
16 {
17 
18 #if defined(_IRR_COMPILE_WITH_TGA_LOADER_) || defined(_IRR_COMPILE_WITH_TGA_WRITER_)
19 
20 // byte-align structures
21 #include "irrpack.h"
22 
23 	// these structs are also used in the TGA writer
24 	struct STGAHeader{
25 		u8 IdLength;
26 		u8 ColorMapType;
27 		u8 ImageType;
28 		u8 FirstEntryIndex[2];
29 		u16 ColorMapLength;
30 		u8 ColorMapEntrySize;
31 		u8 XOrigin[2];
32 		u8 YOrigin[2];
33 		u16 ImageWidth;
34 		u16 ImageHeight;
35 		u8 PixelDepth;
36 		u8 ImageDescriptor;
37 	} PACK_STRUCT;
38 
39 	struct STGAFooter
40 	{
41 		u32 ExtensionOffset;
42 		u32 DeveloperOffset;
43 		c8  Signature[18];
44 	} PACK_STRUCT;
45 
46 // Default alignment
47 #include "irrunpack.h"
48 
49 #endif // compiled with loader or reader
50 
51 #ifdef _IRR_COMPILE_WITH_TGA_LOADER_
52 
53 /*!
54 	Surface Loader for targa images
55 */
56 class CImageLoaderTGA : public IImageLoader
57 {
58 public:
59 
60 	//! returns true if the file maybe is able to be loaded by this class
61 	//! based on the file extension (e.g. ".tga")
62 	virtual bool isALoadableFileExtension(const io::path& filename) const;
63 
64 	//! returns true if the file maybe is able to be loaded by this class
65 	virtual bool isALoadableFileFormat(io::IReadFile* file) const;
66 
67 	//! creates a surface from the file
68 	virtual IImage* loadImage(io::IReadFile* file) const;
69 
70 private:
71 
72 	//! loads a compressed tga. Was written and sent in by Jon Pry, thank you very much!
73 	u8* loadCompressedImage(io::IReadFile *file, const STGAHeader& header) const;
74 };
75 
76 #endif // compiled with loader
77 
78 } // end namespace video
79 } // end namespace irr
80 
81 #endif
82 
83