1 #include "Common/GPU/OpenGL/DataFormatGL.h"
2 #include "Common/Log.h"
3 
4 namespace Draw {
5 
6 // TODO: Also output storage format (GL_RGBA8 etc) for modern GL usage.
Thin3DFormatToFormatAndType(DataFormat fmt,GLuint & internalFormat,GLuint & format,GLuint & type,int & alignment)7 bool Thin3DFormatToFormatAndType(DataFormat fmt, GLuint &internalFormat, GLuint &format, GLuint &type, int &alignment) {
8 	alignment = 4;
9 	switch (fmt) {
10 	case DataFormat::R8G8B8A8_UNORM:
11 		internalFormat = GL_RGBA;
12 		format = GL_RGBA;
13 		type = GL_UNSIGNED_BYTE;
14 		break;
15 
16 	case DataFormat::D32F:
17 		internalFormat = GL_DEPTH_COMPONENT;
18 		format = GL_DEPTH_COMPONENT;
19 		type = GL_FLOAT;
20 		break;
21 
22 #ifndef USING_GLES2
23 	case DataFormat::S8:
24 		internalFormat = GL_STENCIL_INDEX;
25 		format = GL_STENCIL_INDEX;
26 		type = GL_UNSIGNED_BYTE;
27 		alignment = 1;
28 		break;
29 #endif
30 
31 	case DataFormat::R8G8B8_UNORM:
32 		internalFormat = GL_RGB;
33 		format = GL_RGB;
34 		type = GL_UNSIGNED_BYTE;
35 		alignment = 1;
36 		break;
37 
38 	case DataFormat::R4G4B4A4_UNORM_PACK16:
39 		internalFormat = GL_RGBA;
40 		format = GL_RGBA;
41 		type = GL_UNSIGNED_SHORT_4_4_4_4;
42 		alignment = 2;
43 		break;
44 
45 	case DataFormat::R5G6B5_UNORM_PACK16:
46 		internalFormat = GL_RGB;
47 		format = GL_RGB;
48 		type = GL_UNSIGNED_SHORT_5_6_5;
49 		alignment = 2;
50 		break;
51 
52 	case DataFormat::R5G5B5A1_UNORM_PACK16:
53 		internalFormat = GL_RGBA;
54 		format = GL_RGBA;
55 		type = GL_UNSIGNED_SHORT_5_5_5_1;
56 		alignment = 2;
57 		break;
58 
59 	case DataFormat::R32G32B32A32_FLOAT:
60 		internalFormat = GL_RGBA32F;
61 		format = GL_RGBA;
62 		type = GL_FLOAT;
63 		alignment = 16;
64 		break;
65 
66 	default:
67 		return false;
68 	}
69 	return true;
70 }
71 
72 }
73