summaryrefslogtreecommitdiff
path: root/Runtime/Graphics/TextureFormat.h
blob: 5d6eed0ed8f706dd30198e36b8cb7d869731731f (plain)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
#pragma once

#include "Runtime/GfxDevice/GfxDeviceTypes.h"
#include "Runtime/Math/ColorSpaceConversion.h"

/* Important note about endianess.
   Endianess needs to be swapped for the following formats:
   kTexFormatARGBFloat, kTexFormatRGB565, kTexFormatARGB4444, (assuming for this too: kTexFormatRGBA4444)
*/

UInt32 GetBytesFromTextureFormat( TextureFormat inFormat );
UInt32 GetMaxBytesPerPixel( TextureFormat inFormat );
int GetRowBytesFromWidthAndFormat( int width, TextureFormat format );
bool IsValidTextureFormat (TextureFormat format);


inline bool IsCompressedDXTTextureFormat( TextureFormat format )
{
	return format >= kTexFormatDXT1 && format <= kTexFormatDXT5;
}

inline bool IsCompressedPVRTCTextureFormat( TextureFormat format )
{
	return format >= kTexFormatPVRTC_RGB2 && format <= kTexFormatPVRTC_RGBA4;
}

inline bool IsCompressedETCTextureFormat( TextureFormat format )
{
	return format == kTexFormatETC_RGB4;
}

inline bool IsCompressedEACTextureFormat( TextureFormat format )
{
	return format >= kTexFormatEAC_R && format <= kTexFormatEAC_RG_SIGNED;
}

inline bool IsCompressedETC2TextureFormat( TextureFormat format )
{
	return format >= kTexFormatETC2_RGB && format <= kTexFormatETC2_RGBA8;
}

inline bool IsCompressedATCTextureFormat( TextureFormat format )
{
	return format == kTexFormatATC_RGB4 || format == kTexFormatATC_RGBA8;
}
inline bool IsCompressedFlashATFTextureFormat( TextureFormat format )
{
	return format == kTexFormatFlashATF_RGB_DXT1 || format == kTexFormatFlashATF_RGBA_JPG || format == kTexFormatFlashATF_RGB_JPG;
}
inline bool Is16BitTextureFormat(TextureFormat format )
{
	return format == kTexFormatARGB4444 || format == kTexFormatRGBA4444 || format == kTexFormatRGB565;
}

inline bool IsCompressedASTCTextureFormat( TextureFormat format)
{
	return format >= kTexFormatASTC_RGB_4x4 && format <= kTexFormatASTC_RGBA_12x12;
}

inline bool IsTextureFormatSupportedOnFlash(TextureFormat format )
{
	return IsCompressedFlashATFTextureFormat(format) ||
		format == kTexFormatARGB32 ||
		format == kTexFormatRGBA32 ||
		format == kTexFormatRGB24 ||
		format == kTexFormatAlpha8;
}

inline bool IsAnyCompressedTextureFormat( TextureFormat format )
{
	return     IsCompressedDXTTextureFormat(format) || IsCompressedPVRTCTextureFormat(format)
			|| IsCompressedETCTextureFormat(format) || IsCompressedATCTextureFormat(format)
			|| IsCompressedFlashATFTextureFormat (format) || IsCompressedEACTextureFormat(format)
			|| IsCompressedETC2TextureFormat(format) || IsCompressedASTCTextureFormat(format);
}

bool IsAlphaOnlyTextureFormat( TextureFormat format );

int GetTextureSizeAllowedMultiple( TextureFormat format );
int GetMinimumTextureMipSizeForFormat( TextureFormat format );
bool IsAlphaOnlyTextureFormat( TextureFormat format );

TextureFormat ConvertToAlphaTextureFormat (TextureFormat format);

bool HasAlphaTextureFormat( TextureFormat format );

bool IsDepthRTFormat( RenderTextureFormat format );
bool IsHalfRTFormat( RenderTextureFormat format );

const char* GetCompressionTypeString (TextureFormat format);
const char* GetTextureFormatString (TextureFormat format);
const char* GetTextureColorSpaceString (TextureColorSpace colorSpace);

TextureColorSpace ColorSpaceToTextureColorSpace(BuildTargetPlatform platform, ColorSpace colorSpace);

std::pair<int,int> RoundTextureDimensionsToBlocks (TextureFormat fmt, int w, int h);