mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-11 21:58:31 +09:00
[Fix] (MG_State/Program): does it still crash?
This commit is contained in:
@@ -154,9 +154,13 @@ namespace MobileGL {
|
|||||||
}
|
}
|
||||||
m_uboScratch.resize(m_metadata.uboSize, 0);
|
m_uboScratch.resize(m_metadata.uboSize, 0);
|
||||||
|
|
||||||
m_uniformTypes.resize(uniformOffsets.size());
|
auto& types = m_metadata.plainUniformMemberTypes;
|
||||||
for (const auto& [name, type] : m_metadata.plainUniformMemberTypes) {
|
assert(types.size() == m_uniformOffsets.size());
|
||||||
m_uniformTypes[m_uniforms[name]] = MG_Util::ConvertSpvcTypeToGLEnum(type);
|
m_uniformTypes.resize(m_uniformOffsets.size());
|
||||||
|
for (const auto& [name, type] : types) {
|
||||||
|
auto gltype = MG_Util::ConvertSpvcTypeToGLEnum(type);
|
||||||
|
auto location = m_uniforms[name];
|
||||||
|
m_uniformTypes[location] = gltype;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // namespace GLState
|
} // namespace GLState
|
||||||
|
|||||||
@@ -112,7 +112,6 @@ TEST_F(ProgramTest, CompileAndLink) {
|
|||||||
printf("Linking program...\n");
|
printf("Linking program...\n");
|
||||||
LinkProgram(program);
|
LinkProgram(program);
|
||||||
printf("Program linked...\n");
|
printf("Program linked...\n");
|
||||||
return;
|
|
||||||
|
|
||||||
EXPECT_EQ(GetUniformLocation(program, "ProjMat"), 0);
|
EXPECT_EQ(GetUniformLocation(program, "ProjMat"), 0);
|
||||||
EXPECT_EQ(GetUniformLocation(program, "Gray"), 1);
|
EXPECT_EQ(GetUniformLocation(program, "Gray"), 1);
|
||||||
|
|||||||
@@ -20,26 +20,26 @@ namespace MobileGL {
|
|||||||
if (matCol > 1) {
|
if (matCol > 1) {
|
||||||
switch (baseType) {
|
switch (baseType) {
|
||||||
case GL_FLOAT:
|
case GL_FLOAT:
|
||||||
|
if (vecSize == 4 && matCol == 4) return GL_FLOAT_MAT4;
|
||||||
|
if (vecSize == 3 && matCol == 3) return GL_FLOAT_MAT3;
|
||||||
if (vecSize == 2 && matCol == 2) return GL_FLOAT_MAT2;
|
if (vecSize == 2 && matCol == 2) return GL_FLOAT_MAT2;
|
||||||
if (vecSize == 2 && matCol == 3) return GL_FLOAT_MAT3x2;
|
if (vecSize == 2 && matCol == 3) return GL_FLOAT_MAT3x2;
|
||||||
if (vecSize == 2 && matCol == 4) return GL_FLOAT_MAT4x2;
|
if (vecSize == 2 && matCol == 4) return GL_FLOAT_MAT4x2;
|
||||||
if (vecSize == 3 && matCol == 2) return GL_FLOAT_MAT2x3;
|
if (vecSize == 3 && matCol == 2) return GL_FLOAT_MAT2x3;
|
||||||
if (vecSize == 3 && matCol == 3) return GL_FLOAT_MAT3;
|
|
||||||
if (vecSize == 3 && matCol == 4) return GL_FLOAT_MAT4x3;
|
if (vecSize == 3 && matCol == 4) return GL_FLOAT_MAT4x3;
|
||||||
if (vecSize == 4 && matCol == 2) return GL_FLOAT_MAT2x4;
|
if (vecSize == 4 && matCol == 2) return GL_FLOAT_MAT2x4;
|
||||||
if (vecSize == 4 && matCol == 3) return GL_FLOAT_MAT3x4;
|
if (vecSize == 4 && matCol == 3) return GL_FLOAT_MAT3x4;
|
||||||
if (vecSize == 4 && matCol == 4) return GL_FLOAT_MAT4;
|
|
||||||
break;
|
break;
|
||||||
case GL_DOUBLE:
|
case GL_DOUBLE:
|
||||||
|
if (vecSize == 4 && matCol == 4) return GL_DOUBLE_MAT4;
|
||||||
|
if (vecSize == 3 && matCol == 3) return GL_DOUBLE_MAT3;
|
||||||
if (vecSize == 2 && matCol == 2) return GL_DOUBLE_MAT2;
|
if (vecSize == 2 && matCol == 2) return GL_DOUBLE_MAT2;
|
||||||
if (vecSize == 2 && matCol == 3) return GL_DOUBLE_MAT3x2;
|
if (vecSize == 2 && matCol == 3) return GL_DOUBLE_MAT3x2;
|
||||||
if (vecSize == 2 && matCol == 4) return GL_DOUBLE_MAT4x2;
|
if (vecSize == 2 && matCol == 4) return GL_DOUBLE_MAT4x2;
|
||||||
if (vecSize == 3 && matCol == 2) return GL_DOUBLE_MAT2x3;
|
if (vecSize == 3 && matCol == 2) return GL_DOUBLE_MAT2x3;
|
||||||
if (vecSize == 3 && matCol == 3) return GL_DOUBLE_MAT3;
|
|
||||||
if (vecSize == 3 && matCol == 4) return GL_DOUBLE_MAT4x3;
|
if (vecSize == 3 && matCol == 4) return GL_DOUBLE_MAT4x3;
|
||||||
if (vecSize == 4 && matCol == 2) return GL_DOUBLE_MAT2x4;
|
if (vecSize == 4 && matCol == 2) return GL_DOUBLE_MAT2x4;
|
||||||
if (vecSize == 4 && matCol == 3) return GL_DOUBLE_MAT3x4;
|
if (vecSize == 4 && matCol == 3) return GL_DOUBLE_MAT3x4;
|
||||||
if (vecSize == 4 && matCol == 4) return GL_DOUBLE_MAT4;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
@@ -50,17 +50,17 @@ namespace MobileGL {
|
|||||||
switch (baseType) {
|
switch (baseType) {
|
||||||
case GL_BOOL:
|
case GL_BOOL:
|
||||||
switch (vecSize) {
|
switch (vecSize) {
|
||||||
case 2: return GL_BOOL_VEC2;
|
|
||||||
case 3: return GL_BOOL_VEC3;
|
|
||||||
case 4: return GL_BOOL_VEC4;
|
case 4: return GL_BOOL_VEC4;
|
||||||
|
case 3: return GL_BOOL_VEC3;
|
||||||
|
case 2: return GL_BOOL_VEC2;
|
||||||
}
|
}
|
||||||
case GL_FLOAT:
|
case GL_FLOAT:
|
||||||
return GL_FLOAT_VEC2 + (vecSize - 2); // GL_FLOAT_VEC* is contiguous
|
return GL_FLOAT_VEC2 + (vecSize - 2); // GL_FLOAT_VEC* is contiguous
|
||||||
case GL_DOUBLE:
|
case GL_DOUBLE:
|
||||||
switch (vecSize) {
|
switch (vecSize) {
|
||||||
case 2: return GL_DOUBLE_VEC2;
|
case 4: return GL_DOUBLE_VEC4;
|
||||||
case 3: return GL_DOUBLE_VEC3;
|
case 3: return GL_DOUBLE_VEC3;
|
||||||
case 4: return GL_DOUBLE_VEC4;
|
case 2: return GL_DOUBLE_VEC2;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GL_INT:
|
case GL_INT:
|
||||||
|
|||||||
Reference in New Issue
Block a user