This commit is contained in:
Deal(一线灵) 2023-02-09 21:40:38 +08:00 committed by GitHub
parent c44c84a1ca
commit 5b9fa73640
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 10 deletions

View File

@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
Copyright (c) 2018-2019 Xiamen Yaji Software Co., Ltd. Copyright (c) 2018-2019 Xiamen Yaji Software Co., Ltd.
Copyright (c) 2021-2022 Bytedance Inc. Copyright (c) 2021-2023 Bytedance Inc.
https://axmolengine.github.io/ https://axmolengine.github.io/
@ -305,8 +305,7 @@ void ProgramState::convertAndCopyUniformData(const backend::UniformInfo& uniform
void* buffer) void* buffer)
{ {
auto basicType = static_cast<glslopt_basic_type>(uniformInfo.type); auto basicType = static_cast<glslopt_basic_type>(uniformInfo.type);
char* convertedData = new char[uniformInfo.size];
memset(convertedData, 0, uniformInfo.size);
int offset = 0; int offset = 0;
switch (basicType) switch (basicType)
{ {
@ -314,23 +313,27 @@ void ProgramState::convertAndCopyUniformData(const backend::UniformInfo& uniform
{ {
if (uniformInfo.isMatrix) if (uniformInfo.isMatrix)
{ {
float m4x3[12];
for (int i = 0; i < uniformInfo.count; i++) for (int i = 0; i < uniformInfo.count; i++)
{ {
if (offset >= srcSize) if (offset >= srcSize)
break; break;
convertMat3ToMat4x3((float*)srcData + offset, (float*)convertedData + i * MAT4X3_SIZE); convertMat3ToMat4x3((float*)((uint8_t*)srcData + offset), m4x3);
memcpy((uint8_t*)buffer + uniformInfo.location + i * sizeof(m4x3), m4x3, sizeof(m4x3));
offset += MAT3_SIZE; offset += MAT3_SIZE;
} }
} }
else else
{ {
float f4[4];
for (int i = 0; i < uniformInfo.count; i++) for (int i = 0; i < uniformInfo.count; i++)
{ {
if (offset >= srcSize) if (offset >= srcSize)
break; break;
convertVec3ToVec4((float*)srcData + offset, (float*)convertedData + i * VEC4_SIZE); convertVec3ToVec4((float*)((uint8_t*)srcData + offset), f4);
memcpy((uint8_t*)buffer + uniformInfo.location + i * sizeof(f4), f4, sizeof(f4));
offset += VEC3_SIZE; offset += VEC3_SIZE;
} }
} }
@ -338,24 +341,28 @@ void ProgramState::convertAndCopyUniformData(const backend::UniformInfo& uniform
} }
case kGlslTypeBool: case kGlslTypeBool:
{ {
bool b4[4];
for (int i = 0; i < uniformInfo.count; i++) for (int i = 0; i < uniformInfo.count; i++)
{ {
if (offset >= srcSize) if (offset >= srcSize)
break; break;
convertbVec3TobVec4((bool*)srcData + offset, (bool*)convertedData + i * BVEC4_SIZE); convertbVec3TobVec4((bool*)((uint8_t*)srcData + offset), b4);
memcpy((uint8_t*)buffer + uniformInfo.location + i * sizeof(b4), b4, sizeof(b4));
offset += BVEC3_SIZE; offset += BVEC3_SIZE;
} }
break; break;
} }
case kGlslTypeInt: case kGlslTypeInt:
{ {
int i4[4];
for (int i = 0; i < uniformInfo.count; i++) for (int i = 0; i < uniformInfo.count; i++)
{ {
if (offset >= srcSize) if (offset >= srcSize)
break; break;
convertiVec3ToiVec4((int*)srcData + offset, (int*)convertedData + i * IVEC4_SIZE); convertiVec3ToiVec4((int*)((uint8_t*)srcData + offset), i4);
memcpy((uint8_t*)buffer + uniformInfo.location + i * sizeof(i4), i4, sizeof(i4));
offset += IVEC3_SIZE; offset += IVEC3_SIZE;
} }
break; break;
@ -364,9 +371,6 @@ void ProgramState::convertAndCopyUniformData(const backend::UniformInfo& uniform
AX_ASSERT(false); AX_ASSERT(false);
break; break;
} }
memcpy((char*)buffer + uniformInfo.location, convertedData, uniformInfo.size);
AX_SAFE_DELETE_ARRAY(convertedData);
} }
#endif #endif