CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
Path: blob/master/Common/GPU/OpenGL/DataFormatGL.cpp
Views: 1401
#include "Common/GPU/OpenGL/DataFormatGL.h"1#include "Common/GPU/OpenGL/GLFeatures.h"2#include "Common/Log.h"34namespace Draw {56// TODO: Also output storage format (GL_RGBA8 etc) for modern GL usage.7bool Thin3DFormatToGLFormatAndType(DataFormat fmt, GLuint &internalFormat, GLuint &format, GLuint &type, int &alignment) {8alignment = 4;9switch (fmt) {10case DataFormat::R16_UNORM:11internalFormat = GL_RGBA;12format = GL_RED;13type = GL_UNSIGNED_SHORT;14alignment = 2;15break;1617case DataFormat::R8_UNORM:18if (gl_extensions.IsGLES) {19internalFormat = GL_LUMINANCE;20format = GL_LUMINANCE;21} else if (gl_extensions.VersionGEThan(3, 0)) {22internalFormat = GL_RED;23format = GL_RED;24} else {25internalFormat = GL_RGBA;26format = GL_RED;27}28type = GL_UNSIGNED_BYTE;29alignment = 1;30break;3132case DataFormat::R8G8B8A8_UNORM:33internalFormat = GL_RGBA;34format = GL_RGBA;35type = GL_UNSIGNED_BYTE;36break;3738case DataFormat::D32F:39internalFormat = GL_DEPTH_COMPONENT;40format = GL_DEPTH_COMPONENT;41type = GL_FLOAT;42break;4344#ifndef USING_GLES245case DataFormat::S8:46internalFormat = GL_STENCIL_INDEX;47format = GL_STENCIL_INDEX;48type = GL_UNSIGNED_BYTE;49alignment = 1;50break;51#endif5253case DataFormat::R8G8B8_UNORM:54internalFormat = GL_RGB;55format = GL_RGB;56type = GL_UNSIGNED_BYTE;57alignment = 3;58break;5960case DataFormat::R4G4B4A4_UNORM_PACK16:61internalFormat = GL_RGBA;62format = GL_RGBA;63type = GL_UNSIGNED_SHORT_4_4_4_4;64alignment = 2;65break;6667case DataFormat::R5G6B5_UNORM_PACK16:68internalFormat = GL_RGB;69format = GL_RGB;70type = GL_UNSIGNED_SHORT_5_6_5;71alignment = 2;72break;7374case DataFormat::R5G5B5A1_UNORM_PACK16:75internalFormat = GL_RGBA;76format = GL_RGBA;77type = GL_UNSIGNED_SHORT_5_5_5_1;78alignment = 2;79break;8081case DataFormat::R32G32B32A32_FLOAT:82internalFormat = GL_RGBA32F;83format = GL_RGBA;84type = GL_FLOAT;85alignment = 16;86break;8788#ifndef USING_GLES289case DataFormat::BC1_RGBA_UNORM_BLOCK:90internalFormat = GL_COMPRESSED_RGB_S3TC_DXT1_EXT;91format = GL_RGB;92type = GL_FLOAT;93alignment = 8;94break;95case DataFormat::BC2_UNORM_BLOCK:96internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;97format = GL_RGBA;98type = GL_FLOAT;99alignment = 16;100break;101case DataFormat::BC3_UNORM_BLOCK:102internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;103format = GL_RGBA;104type = GL_FLOAT;105alignment = 16;106break;107case DataFormat::BC4_UNORM_BLOCK:108internalFormat = GL_COMPRESSED_RED_RGTC1;109format = GL_R;110type = GL_FLOAT;111alignment = 16;112break;113case DataFormat::BC5_UNORM_BLOCK:114internalFormat = GL_COMPRESSED_RG_RGTC2;115format = GL_RG;116type = GL_FLOAT;117alignment = 16;118break;119case DataFormat::BC7_UNORM_BLOCK:120internalFormat = GL_COMPRESSED_RGBA_BPTC_UNORM;121format = GL_RGBA;122type = GL_FLOAT;123alignment = 16;124break;125#endif126127case DataFormat::ETC2_R8G8B8_UNORM_BLOCK:128internalFormat = GL_COMPRESSED_RGB8_ETC2;129format = GL_RGB;130type = GL_FLOAT;131alignment = 8;132break;133134case DataFormat::ETC2_R8G8B8A1_UNORM_BLOCK:135internalFormat = GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2;136format = GL_RGBA;137type = GL_FLOAT;138alignment = 16;139break;140141case DataFormat::ETC2_R8G8B8A8_UNORM_BLOCK:142internalFormat = GL_COMPRESSED_RGBA8_ETC2_EAC;143format = GL_RGBA;144type = GL_FLOAT;145alignment = 16;146break;147148#ifdef GL_COMPRESSED_RGBA_ASTC_4x4_KHR149case DataFormat::ASTC_4x4_UNORM_BLOCK:150internalFormat = GL_COMPRESSED_RGBA_ASTC_4x4_KHR;151format = GL_RGBA;152type = GL_FLOAT;153alignment = 16;154break;155#endif156157default:158return false;159}160return true;161}162163}164165166