1 /**
2  * Copyright (c) 2006-2019 LOVE Development Team
3  *
4  * This software is provided 'as-is', without any express or implied
5  * warranty.  In no event will the authors be held liable for any damages
6  * arising from the use of this software.
7  *
8  * Permission is granted to anyone to use this software for any purpose,
9  * including commercial applications, and to alter it and redistribute it
10  * freely, subject to the following restrictions:
11  *
12  * 1. The origin of this software must not be misrepresented; you must not
13  *    claim that you wrote the original software. If you use this software
14  *    in a product, an acknowledgment in the product documentation would be
15  *    appreciated but is not required.
16  * 2. Altered source versions must be plainly marked as such, and must not be
17  *    misrepresented as being the original software.
18  * 3. This notice may not be removed or altered from any source distribution.
19  **/
20 
21 #pragma once
22 
23 #include "stddef.h"
24 
25 namespace love
26 {
27 
28 enum PixelFormat
29 {
30     PIXELFORMAT_UNKNOWN,
31 
32 	// these are converted to an actual format by love
33 	PIXELFORMAT_NORMAL,
34 	PIXELFORMAT_HDR,
35 
36 	// "regular" formats
37 	PIXELFORMAT_R8,
38 	PIXELFORMAT_RG8,
39 	PIXELFORMAT_RGBA8,
40 	PIXELFORMAT_sRGBA8,
41 	PIXELFORMAT_R16,
42 	PIXELFORMAT_RG16,
43 	PIXELFORMAT_RGBA16,
44 	PIXELFORMAT_R16F,
45 	PIXELFORMAT_RG16F,
46 	PIXELFORMAT_RGBA16F,
47 	PIXELFORMAT_R32F,
48 	PIXELFORMAT_RG32F,
49 	PIXELFORMAT_RGBA32F,
50 
51 	PIXELFORMAT_LA8, // Same as RG8, but accessed as (L, L, L, A)
52 
53 	// packed formats
54 	PIXELFORMAT_RGBA4,    // LSB->MSB: [a, b, g, r]
55 	PIXELFORMAT_RGB5A1,   // LSB->MSB: [a, b, g, r]
56 	PIXELFORMAT_RGB565,   // LSB->MSB: [b, g, r]
57 	PIXELFORMAT_RGB10A2,  // LSB->MSB: [r, g, b, a]
58 	PIXELFORMAT_RG11B10F, // LSB->MSB: [r, g, b]
59 
60 	// depth/stencil formats
61 	PIXELFORMAT_STENCIL8,
62 	PIXELFORMAT_DEPTH16,
63 	PIXELFORMAT_DEPTH24,
64 	PIXELFORMAT_DEPTH32F,
65 	PIXELFORMAT_DEPTH24_STENCIL8,
66 	PIXELFORMAT_DEPTH32F_STENCIL8,
67 
68 	// compressed formats
69 	PIXELFORMAT_DXT1,
70 	PIXELFORMAT_DXT3,
71 	PIXELFORMAT_DXT5,
72 	PIXELFORMAT_BC4,
73 	PIXELFORMAT_BC4s,
74 	PIXELFORMAT_BC5,
75 	PIXELFORMAT_BC5s,
76 	PIXELFORMAT_BC6H,
77 	PIXELFORMAT_BC6Hs,
78 	PIXELFORMAT_BC7,
79 	PIXELFORMAT_PVR1_RGB2,
80 	PIXELFORMAT_PVR1_RGB4,
81 	PIXELFORMAT_PVR1_RGBA2,
82 	PIXELFORMAT_PVR1_RGBA4,
83 	PIXELFORMAT_ETC1,
84 	PIXELFORMAT_ETC2_RGB,
85 	PIXELFORMAT_ETC2_RGBA,
86 	PIXELFORMAT_ETC2_RGBA1,
87 	PIXELFORMAT_EAC_R,
88 	PIXELFORMAT_EAC_Rs,
89 	PIXELFORMAT_EAC_RG,
90 	PIXELFORMAT_EAC_RGs,
91 	PIXELFORMAT_ASTC_4x4,
92 	PIXELFORMAT_ASTC_5x4,
93 	PIXELFORMAT_ASTC_5x5,
94 	PIXELFORMAT_ASTC_6x5,
95 	PIXELFORMAT_ASTC_6x6,
96 	PIXELFORMAT_ASTC_8x5,
97 	PIXELFORMAT_ASTC_8x6,
98 	PIXELFORMAT_ASTC_8x8,
99 	PIXELFORMAT_ASTC_10x5,
100 	PIXELFORMAT_ASTC_10x6,
101 	PIXELFORMAT_ASTC_10x8,
102 	PIXELFORMAT_ASTC_10x10,
103 	PIXELFORMAT_ASTC_12x10,
104 	PIXELFORMAT_ASTC_12x12,
105 
106 	PIXELFORMAT_MAX_ENUM
107 };
108 
109 bool getConstant(PixelFormat in, const char *&out);
110 bool getConstant(const char *in, PixelFormat &out);
111 
112 /**
113  * Gets whether the specified pixel format is a compressed type.
114  **/
115 bool isPixelFormatCompressed(PixelFormat format);
116 
117 /**
118  * Gets whether the specified pixel format is a depth or stencil type.
119  **/
120 bool isPixelFormatDepthStencil(PixelFormat format);
121 
122 /**
123  * Gets whether the specified pixel format is a depth type.
124  **/
125 bool isPixelFormatDepth(PixelFormat format);
126 
127 /**
128  * Gets whether the specified pixel format is a stencil type.
129  **/
130 bool isPixelFormatStencil(PixelFormat format);
131 
132 /**
133  * Gets the size in bytes of the specified pixel format.
134  * NOTE: Currently returns 0 for compressed formats.
135  **/
136 size_t getPixelFormatSize(PixelFormat format);
137 
138 /**
139  * Gets the number of color components in the given pixel format.
140  **/
141 int getPixelFormatColorComponents(PixelFormat format);
142 
143 } // love
144