首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flatbuffers:访问冲突: Endian Scalar

Flatbuffers:访问冲突: Endian Scalar
EN

Stack Overflow用户
提问于 2018-01-05 19:58:29
回答 1查看 655关注 0票数 0

https://pastebin.com/1cZ8M5Zk

模式:

代码语言:javascript
复制
/* 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;
*/

建筑:

代码语言:javascript
复制
//....
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);
//...

装货:

代码语言:javascript
复制
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中调用表向量时,我会遇到访问冲突。包含的是架构和源代码。我认为这与组件如何为MeshData表一起序列化有关,但我无法确定确切的位置。当我尝试运行assert(FBMeshesIndex>MData();它是根-> Vec :Tables()->Get(I)->Vec:Tables())时,会得到错误。

TestBed.exe!平面缓冲区::ReadScalar(const* p)第219行C++符号加载。( TestBed.exe!flatbuffers::Table::GetOptionalFieldOffset(unsigned短字段) 1866行C++符号加载。( TestBed.exe!flatbuffers::Table::GetPointer(unsigned短字段) 1878行C++符号加载。( TestBed.exe!flatbuffers::Table::GetPointer(unsigned短字段) 1885行C++符号加载。已加载TestBed.exe!Resource::Model::VertexObject::MData()行180 C++符号。TestBed.exe!main()行147 C++符号加载。外部代码注释框架

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-05 23:47:54

代码看起来很好,所以问题可能在代码之外,data是如何从构建到被使用的。

name 1024的值是多少?是FBMeshes->size() 2吗?此外,在访问data之前,您应该在它上运行一个验证器,以查看数据的传递方式是否有任何问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48120458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档