mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-07 19:58:32 +09:00
[Feat] (MG_Util/Metrics): GetGLTypeSize
This commit is contained in:
@@ -32,6 +32,7 @@ add_executable(
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/DataTypeConverter.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/BufferEnumConverter.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/DataTypeConverter.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Metrics/BufferMetrics.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Backend/Init.cpp
|
||||
|
||||
@@ -63,6 +63,7 @@ add_executable(
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/DataTypeConverter.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/BufferEnumConverter.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/DataTypeConverter.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Metrics/BufferMetrics.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Backend/Init.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Debug/Log.cpp
|
||||
)
|
||||
|
||||
@@ -32,6 +32,7 @@ add_executable(
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Converters/MGToGL/DataTypeConverter.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/BufferEnumConverter.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Converters/GLToMG/DataTypeConverter.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/Metrics/BufferMetrics.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp
|
||||
${MGL_ROOT}/MobileGL/MG_Backend/Init.cpp
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
//
|
||||
// Created by Swung0x48 on 2025/8/22.
|
||||
//
|
||||
|
||||
#include "BufferMetrics.h"
|
||||
|
||||
namespace MobileGL {
|
||||
namespace MG_Util {
|
||||
SizeT GetGLTypeSize(GLenum type) {
|
||||
switch (type) {
|
||||
// Scalars
|
||||
case GL_BYTE:
|
||||
case GL_UNSIGNED_BYTE:
|
||||
case GL_UNSIGNED_BYTE_3_3_2:
|
||||
return 1;
|
||||
case GL_SHORT:
|
||||
case GL_UNSIGNED_SHORT:
|
||||
case GL_HALF_FLOAT:
|
||||
case GL_UNSIGNED_SHORT_5_6_5:
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4:
|
||||
case GL_UNSIGNED_SHORT_5_5_5_1:
|
||||
return 2;
|
||||
case GL_INT:
|
||||
case GL_UNSIGNED_INT:
|
||||
case GL_FLOAT:
|
||||
case GL_FIXED:
|
||||
case GL_INT_2_10_10_10_REV:
|
||||
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
||||
case GL_UNSIGNED_INT_10F_11F_11F_REV:
|
||||
case GL_UNSIGNED_INT_5_9_9_9_REV:
|
||||
return 4;
|
||||
case GL_DOUBLE:
|
||||
#ifdef GL_ARB_gpu_shader_int64
|
||||
case GL_UNSIGNED_INT64_ARB:
|
||||
case GL_INT64_ARB:
|
||||
#endif
|
||||
return 8;
|
||||
|
||||
// ---- Vector Types ----
|
||||
// 2-component vec
|
||||
case GL_FLOAT_VEC2:
|
||||
case GL_INT_VEC2:
|
||||
case GL_UNSIGNED_INT_VEC2:
|
||||
case GL_BOOL_VEC2:
|
||||
return 2 * sizeof(GLfloat); // GL_BOOL_VEC2 is also 2 * 4 bytes
|
||||
case GL_DOUBLE_VEC2:
|
||||
return 2 * sizeof(GLdouble);
|
||||
|
||||
// 3-component vec
|
||||
case GL_FLOAT_VEC3:
|
||||
case GL_INT_VEC3:
|
||||
case GL_UNSIGNED_INT_VEC3:
|
||||
case GL_BOOL_VEC3:
|
||||
return 3 * sizeof(GLfloat);
|
||||
case GL_DOUBLE_VEC3:
|
||||
return 3 * sizeof(GLdouble);
|
||||
|
||||
// 4-component vec
|
||||
case GL_FLOAT_VEC4:
|
||||
case GL_INT_VEC4:
|
||||
case GL_UNSIGNED_INT_VEC4:
|
||||
case GL_BOOL_VEC4:
|
||||
return 4 * sizeof(GLfloat);
|
||||
case GL_DOUBLE_VEC4:
|
||||
return 4 * sizeof(GLdouble);
|
||||
|
||||
// ---- Matrix Types ----
|
||||
// Double non-square
|
||||
case GL_FLOAT_MAT2:
|
||||
return 2 * 2 * sizeof(GLfloat);
|
||||
case GL_FLOAT_MAT3:
|
||||
return 3 * 3 * sizeof(GLfloat);
|
||||
case GL_FLOAT_MAT4:
|
||||
return 4 * 4 * sizeof(GLfloat);
|
||||
|
||||
// Float non-square
|
||||
case GL_FLOAT_MAT2x3:
|
||||
return 2 * 3 * sizeof(GLfloat);
|
||||
case GL_FLOAT_MAT2x4:
|
||||
return 2 * 4 * sizeof(GLfloat);
|
||||
case GL_FLOAT_MAT3x2:
|
||||
return 3 * 2 * sizeof(GLfloat);
|
||||
case GL_FLOAT_MAT3x4:
|
||||
return 3 * 4 * sizeof(GLfloat);
|
||||
case GL_FLOAT_MAT4x2:
|
||||
return 4 * 2 * sizeof(GLfloat);
|
||||
case GL_FLOAT_MAT4x3:
|
||||
return 4 * 3 * sizeof(GLfloat);
|
||||
|
||||
// Double mat
|
||||
case GL_DOUBLE_MAT2:
|
||||
return 2 * 2 * sizeof(GLdouble);
|
||||
case GL_DOUBLE_MAT3:
|
||||
return 3 * 3 * sizeof(GLdouble);
|
||||
case GL_DOUBLE_MAT4:
|
||||
return 4 * 4 * sizeof(GLdouble);
|
||||
|
||||
// Double non-square
|
||||
case GL_DOUBLE_MAT2x3:
|
||||
return 2 * 3 * sizeof(GLdouble);
|
||||
case GL_DOUBLE_MAT2x4:
|
||||
return 2 * 4 * sizeof(GLdouble);
|
||||
case GL_DOUBLE_MAT3x2:
|
||||
return 3 * 2 * sizeof(GLdouble);
|
||||
case GL_DOUBLE_MAT3x4:
|
||||
return 3 * 4 * sizeof(GLdouble);
|
||||
case GL_DOUBLE_MAT4x2:
|
||||
return 4 * 2 * sizeof(GLdouble);
|
||||
case GL_DOUBLE_MAT4x3:
|
||||
return 4 * 3 * sizeof(GLdouble);
|
||||
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// Created by Swung0x48 on 2025/8/22.
|
||||
//
|
||||
|
||||
#ifndef BUFFERMETRICS_H
|
||||
#define BUFFERMETRICS_H
|
||||
|
||||
#include <Includes.h>
|
||||
|
||||
namespace MobileGL {
|
||||
namespace MG_Util {
|
||||
SizeT GetGLTypeSize(GLenum type);
|
||||
}
|
||||
}
|
||||
|
||||
#endif //BUFFERMETRICS_H
|
||||
Reference in New Issue
Block a user