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)7bool 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