File: TextureLoaderPvr.h

package info (click to toggle)
jazz2-native 3.5.0-1
  • links: PTS, VCS
  • area: contrib
  • in suites:
  • size: 16,836 kB
  • sloc: cpp: 172,557; xml: 113; python: 36; makefile: 5; sh: 2
file content (83 lines) | stat: -rw-r--r-- 3,056 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#pragma once

#include <cstdint> // for header

#include "ITextureLoader.h"

namespace nCine
{
	/// PVR texture loader
	class TextureLoaderPvr : public ITextureLoader
	{
	public:
		explicit TextureLoaderPvr(std::unique_ptr<Death::IO::Stream> fileHandle);

	private:
#ifndef DOXYGEN_GENERATING_OUTPUT
		// Doxygen 1.12.0 outputs also private structs/unions even if it shouldn't
		/// Header for the PVR3 format
		struct Pvr3Header
		{
			std::uint32_t version;
			std::uint32_t flags;
			std::uint64_t pixelFormat;
			std::uint32_t colourSpace;
			std::uint32_t channelType;
			std::uint32_t height;
			std::uint32_t width;
			std::uint32_t depth;
			std::uint32_t numSurfaces;
			std::uint32_t numFaces;
			std::uint32_t numMipmaps;
			std::uint32_t metaDataSize;
		};
#endif

		static const std::uint64_t FMT_PVRTC_2BPP_RGB = 0;
		static const std::uint64_t FMT_PVRTC_2BPP_RGBA = 1;
		static const std::uint64_t FMT_PVRTC_4BPP_RGB = 2;
		static const std::uint64_t FMT_PVRTC_4BPP_RGBA = 3;
		static const std::uint64_t FMT_PVRTCII_2BPP = 4;
		static const std::uint64_t FMT_PVRTCII_4BPP = 5;
		static const std::uint64_t FMT_ETC1 = 6;
		static const std::uint64_t FMT_DXT1 = 7;
		static const std::uint64_t FMT_DXT3 = 9;
		static const std::uint64_t FMT_DXT5 = 11;

		static const std::uint64_t FMT_ETC2_RGB = 22;
		static const std::uint64_t FMT_ETC2_RGBA = 23;
		static const std::uint64_t FMT_ETC2_RGB_A1 = 24;
		static const std::uint64_t FMT_EAC_R11 = 25;
		static const std::uint64_t FMT_EAC_RG11 = 26;
		static const std::uint64_t FMT_ASTC_4x4 = 27;
		static const std::uint64_t FMT_ASTC_5x4 = 28;
		static const std::uint64_t FMT_ASTC_5x5 = 29;
		static const std::uint64_t FMT_ASTC_6x5 = 30;
		static const std::uint64_t FMT_ASTC_6x6 = 31;
		static const std::uint64_t FMT_ASTC_8x5 = 32;
		static const std::uint64_t FMT_ASTC_8x6 = 33;
		static const std::uint64_t FMT_ASTC_8x8 = 34;
		static const std::uint64_t FMT_ASTC_10x5 = 35;
		static const std::uint64_t FMT_ASTC_10x6 = 36;
		static const std::uint64_t FMT_ASTC_10x8 = 37;
		static const std::uint64_t FMT_ASTC_10x10 = 38;
		static const std::uint64_t FMT_ASTC_12x10 = 39;
		static const std::uint64_t FMT_ASTC_12x12 = 40;

		static const std::uint64_t FMT_BGRA_8888 = 0x0808080861726762ULL;
		static const std::uint64_t FMT_RGB_888 = 0x0008080800626772ULL; // rgb08880
		static const std::uint64_t FMT_RGBA_8888 = 0x0808080861626772ULL; // rgba8888
		static const std::uint64_t FMT_RGB_565 = 0x0005060500626772ULL; // rgb05650
		static const std::uint64_t FMT_RGBA_5551 = 0x0105050561626772ULL; // rgba5551
		static const std::uint64_t FMT_RGBA_4444 = 0x0404040461626772ULL; // rgba4444
		static const std::uint64_t FMT_LA_88 = 0x000008080000616cULL;
		static const std::uint64_t FMT_L_8 = 0x000000080000006cULL;
		static const std::uint64_t FMT_A_8 = 0x0000000800000061ULL;

		/// Reads the PVR3 header and fills the corresponding structure
		bool readHeader(Pvr3Header& header);
		/// Parses the PVR3 header to determine its format
		bool parseFormat(const Pvr3Header& header);
	};

}