Flatbuffers:访问冲突:Endian 标量
Flatbuffers: Access Violation: Endian Scalar
架构:
/* Model.fbs
namespace Resource.Model;
struct Vec3 {
x:float;
y:float;
z:float;
}
struct Vec2 {
x:float;
y:float;
}
table MeshData {
Position:[Vec3];
Normal:[Vec3];
TexCoords:[Vec2];
Tangent:[Vec3];
Bitangent:[Vec3];
}
table VertexObject {
MData:MeshData;
Indices:[uint];
MatNameHash:uint;
}
table Model {
Name:uint;
Meshes:[VertexObject];
}
root_type Model;
*/
建筑物:
//....
auto a = builder.CreateVectorOfStructs(Positions);
auto b = builder.CreateVectorOfStructs(Normals);
auto c = builder.CreateVectorOfStructs(TexCoords);
auto d = builder.CreateVectorOfStructs(Tangents);
auto e = builder.CreateVectorOfStructs(Bitangents);
auto f = CreateMeshData(builder, a, b, c, d, e);
auto g = builder.CreateVector<uint32_t>(Indices);
unsigned int h = 1024; //Hash of Name of Material
std::vector<flatbuffers::Offset<VertexObject>> VO;
auto i = CreateVertexObject(builder, f, g, h);
auto i2 = CreateVertexObject(builder, f, g, h);
VO.push_back(i);
VO.push_back(i2);
auto j = builder.CreateVector(VO);
//...
正在加载:
auto test = GetModel(data);
assert(test->Name());
auto name = test->Name();
assert(test->Meshes());
auto FBMeshes = test->Meshes();
for (unsigned int i = 0; i < FBMeshes->size(); i++)
{
assert(FBMeshes->Get(i));
auto FBMeshesIndex = FBMeshes->Get(i);
//assert(FBMeshesIndex->MData());
}
我尝试在 Flatbuffers 中调用 Table Vector 时遇到访问冲突。包括架构和源代码。我认为这与组件如何为 MeshData Table 一起序列化有关,但我无法弄清楚确切位置。当我尝试 运行 assert(FBMeshesIndex->MData()); 时出现错误即Root->Vec:Tables()->Get(i)->Vec:Tables()其中包含了几个Vec of Structs.
TestBed.exe!flatbuffers::ReadScalar(const void * p) Line 219 C++ Symbols loaded.
TestBed.exe!flatbuffers::Table::GetOptionalFieldOffset(unsigned short field) Line 1866 C++ Symbols loaded.
TestBed.exe!flatbuffers::Table::GetPointer(unsigned short field) Line 1878 C++ Symbols loaded.
TestBed.exe!flatbuffers::Table::GetPointer(unsigned short field) Line 1885 C++ Symbols loaded.
TestBed.exe!Resource::Model::VertexObject::MData() Line 180 C++ Symbols loaded.
TestBed.exe!main() Line 147 C++ Symbols loaded.
[External Code] Annotated Frame
代码看起来没问题,所以问题可能出在所显示的代码之外,即 data
如何从构建到使用。
name
的值是1024吗? FBMeshes->size()
是 2 吗?此外,在访问它之前,您应该 运行 在 data
上进行验证,以查看数据的传递方式是否存在任何问题。
架构:
/* Model.fbs
namespace Resource.Model;
struct Vec3 {
x:float;
y:float;
z:float;
}
struct Vec2 {
x:float;
y:float;
}
table MeshData {
Position:[Vec3];
Normal:[Vec3];
TexCoords:[Vec2];
Tangent:[Vec3];
Bitangent:[Vec3];
}
table VertexObject {
MData:MeshData;
Indices:[uint];
MatNameHash:uint;
}
table Model {
Name:uint;
Meshes:[VertexObject];
}
root_type Model;
*/
建筑物:
//....
auto a = builder.CreateVectorOfStructs(Positions);
auto b = builder.CreateVectorOfStructs(Normals);
auto c = builder.CreateVectorOfStructs(TexCoords);
auto d = builder.CreateVectorOfStructs(Tangents);
auto e = builder.CreateVectorOfStructs(Bitangents);
auto f = CreateMeshData(builder, a, b, c, d, e);
auto g = builder.CreateVector<uint32_t>(Indices);
unsigned int h = 1024; //Hash of Name of Material
std::vector<flatbuffers::Offset<VertexObject>> VO;
auto i = CreateVertexObject(builder, f, g, h);
auto i2 = CreateVertexObject(builder, f, g, h);
VO.push_back(i);
VO.push_back(i2);
auto j = builder.CreateVector(VO);
//...
正在加载:
auto test = GetModel(data);
assert(test->Name());
auto name = test->Name();
assert(test->Meshes());
auto FBMeshes = test->Meshes();
for (unsigned int i = 0; i < FBMeshes->size(); i++)
{
assert(FBMeshes->Get(i));
auto FBMeshesIndex = FBMeshes->Get(i);
//assert(FBMeshesIndex->MData());
}
我尝试在 Flatbuffers 中调用 Table Vector 时遇到访问冲突。包括架构和源代码。我认为这与组件如何为 MeshData Table 一起序列化有关,但我无法弄清楚确切位置。当我尝试 运行 assert(FBMeshesIndex->MData()); 时出现错误即Root->Vec:Tables()->Get(i)->Vec:Tables()其中包含了几个Vec of Structs.
TestBed.exe!flatbuffers::ReadScalar(const void * p) Line 219 C++ Symbols loaded. TestBed.exe!flatbuffers::Table::GetOptionalFieldOffset(unsigned short field) Line 1866 C++ Symbols loaded. TestBed.exe!flatbuffers::Table::GetPointer(unsigned short field) Line 1878 C++ Symbols loaded. TestBed.exe!flatbuffers::Table::GetPointer(unsigned short field) Line 1885 C++ Symbols loaded. TestBed.exe!Resource::Model::VertexObject::MData() Line 180 C++ Symbols loaded. TestBed.exe!main() Line 147 C++ Symbols loaded. [External Code] Annotated Frame
代码看起来没问题,所以问题可能出在所显示的代码之外,即 data
如何从构建到使用。
name
的值是1024吗? FBMeshes->size()
是 2 吗?此外,在访问它之前,您应该 运行 在 data
上进行验证,以查看数据的传递方式是否存在任何问题。