mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-08-09 16:19:05 +00:00
CGameArea: VBO & IBO buffer updates
This commit is contained in:
parent
2d2dc9e520
commit
5c6f7ce9ea
@ -1049,63 +1049,57 @@ void CGameArea::FillInStaticGeometry(bool textures) {
|
|||||||
++secIt;
|
++secIt;
|
||||||
}
|
}
|
||||||
|
|
||||||
CGraphics::CommitResources([&](boo::IGraphicsDataFactory::Context& ctx) {
|
/* Reserve extra buffers for 16 cubemaps and shadow rendering */
|
||||||
/* Reserve extra buffers for 16 cubemaps and shadow rendering */
|
// matSet.m_geomLayout->ReserveSharedBuffers(96 + int(EWorldShadowMode::MAX));
|
||||||
matSet.m_geomLayout->ReserveSharedBuffers(ctx, 96 + int(EWorldShadowMode::MAX));
|
|
||||||
|
|
||||||
/* Models */
|
/* Models */
|
||||||
for (CMetroidModelInstance& inst : x12c_postConstructed->x4c_insts) {
|
for (CMetroidModelInstance& inst : x12c_postConstructed->x4c_insts) {
|
||||||
{
|
{
|
||||||
DataSpec::DNAMP1::MREA::MeshHeader header;
|
DataSpec::DNAMP1::MREA::MeshHeader header;
|
||||||
athena::io::MemoryReader r(secIt->first, secIt->second);
|
athena::io::MemoryReader r(secIt->first, secIt->second);
|
||||||
header.read(r);
|
header.read(r);
|
||||||
inst.x0_visorFlags = header.visorFlags.flags;
|
inst.x0_visorFlags = header.visorFlags.flags;
|
||||||
inst.x4_xf = header.xfMtx;
|
inst.x4_xf = header.xfMtx;
|
||||||
inst.x34_aabb = zeus::CAABox(header.aabb[0], header.aabb[1]);
|
inst.x34_aabb = zeus::CAABox(header.aabb[0], header.aabb[1]);
|
||||||
++secIt;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
athena::io::MemoryReader r(secIt->first, secIt->second);
|
|
||||||
inst.m_hmdlMeta.read(r);
|
|
||||||
}
|
|
||||||
++secIt;
|
++secIt;
|
||||||
|
|
||||||
boo::ObjToken<boo::IGraphicsBufferS> vbo;
|
|
||||||
boo::ObjToken<boo::IGraphicsBufferS> ibo;
|
|
||||||
vbo = ctx.newStaticBuffer(boo::BufferUse::Vertex, secIt->first, inst.m_hmdlMeta.vertStride,
|
|
||||||
inst.m_hmdlMeta.vertCount);
|
|
||||||
++secIt;
|
|
||||||
ibo = ctx.newStaticBuffer(boo::BufferUse::Index, secIt->first, 4, inst.m_hmdlMeta.indexCount);
|
|
||||||
++secIt;
|
|
||||||
|
|
||||||
const u32 surfCount = hecl::SBig(*reinterpret_cast<const u32*>(secIt->first));
|
|
||||||
inst.m_surfaces.reserve(surfCount);
|
|
||||||
inst.m_shaders.reserve(surfCount);
|
|
||||||
++secIt;
|
|
||||||
for (u32 j = 0; j < surfCount; ++j) {
|
|
||||||
CBooSurface& surf = inst.m_surfaces.emplace_back();
|
|
||||||
surf.selfIdx = j;
|
|
||||||
athena::io::MemoryReader r(secIt->first, secIt->second);
|
|
||||||
surf.m_data.read(r);
|
|
||||||
++secIt;
|
|
||||||
}
|
|
||||||
|
|
||||||
TToken<CModel> nullModel;
|
|
||||||
inst.m_instance = std::make_unique<CBooModel>(nullModel, nullptr, &inst.m_surfaces, matSet, vbo, ibo,
|
|
||||||
inst.x34_aabb, static_cast<u8>(inst.x0_visorFlags), 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
{
|
||||||
} BooTrace);
|
athena::io::MemoryReader r(secIt->first, secIt->second);
|
||||||
|
inst.m_hmdlMeta.read(r);
|
||||||
|
}
|
||||||
|
++secIt;
|
||||||
|
|
||||||
|
MapVertData(
|
||||||
|
inst.m_hmdlMeta, [&]<typename VertData>() constexpr {
|
||||||
|
inst.m_staticVbo = hsh::create_vertex_buffer<VertData>(
|
||||||
|
hsh::detail::ArrayProxy{reinterpret_cast<const VertData*>(secIt->first), inst.m_hmdlMeta.vertCount});
|
||||||
|
});
|
||||||
|
++secIt;
|
||||||
|
|
||||||
|
inst.m_staticIbo = hsh::create_index_buffer(
|
||||||
|
hsh::detail::ArrayProxy{reinterpret_cast<const u32*>(secIt->first), inst.m_hmdlMeta.indexCount});
|
||||||
|
++secIt;
|
||||||
|
|
||||||
|
const u32 surfCount = hecl::SBig(*reinterpret_cast<const u32*>(secIt->first));
|
||||||
|
inst.m_surfaces.reserve(surfCount);
|
||||||
|
++secIt;
|
||||||
|
for (u32 j = 0; j < surfCount; ++j) {
|
||||||
|
CBooSurface& surf = inst.m_surfaces.emplace_back();
|
||||||
|
surf.selfIdx = j;
|
||||||
|
athena::io::MemoryReader r(secIt->first, secIt->second);
|
||||||
|
surf.m_data.read(r);
|
||||||
|
++secIt;
|
||||||
|
}
|
||||||
|
|
||||||
|
TToken<CModel> nullModel;
|
||||||
|
inst.m_instance = std::make_unique<CBooModel>(
|
||||||
|
nullModel, nullptr, &inst.m_surfaces, matSet, inst.m_staticVbo.get(), inst.m_staticIbo.get(), inst.x34_aabb,
|
||||||
|
static_cast<u8>(inst.x0_visorFlags), 0, VertexFormat{inst.m_hmdlMeta});
|
||||||
|
}
|
||||||
|
|
||||||
for (CMetroidModelInstance& inst : x12c_postConstructed->x4c_insts) {
|
for (CMetroidModelInstance& inst : x12c_postConstructed->x4c_insts) {
|
||||||
for (CBooSurface& surf : inst.m_surfaces) {
|
inst.m_instance->RemapMaterialData(matSet);
|
||||||
auto& shad = inst.m_shaders[surf.m_data.matIdx];
|
|
||||||
if (!shad)
|
|
||||||
shad = matSet.BuildShader(inst.m_hmdlMeta, matSet.m_matSet.materials[surf.m_data.matIdx]);
|
|
||||||
}
|
|
||||||
inst.m_instance->RemapMaterialData(matSet, inst.m_shaders);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
x12c_postConstructed->x1108_25_modelsConstructed = true;
|
x12c_postConstructed->x1108_25_modelsConstructed = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user