From ebf1b2350929ddc8d8737dfdbe817a142a8eac90 Mon Sep 17 00:00:00 2001 From: Joseph Walton-Rivers <joseph@walton-rivers.uk> Date: Sat, 15 Oct 2022 15:44:32 +0100 Subject: [PATCH] don't cache between scenes --- fggl/gfx/ogl4/models.cpp | 16 ++++++++++------ include/fggl/gfx/ogl4/models.hpp | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/fggl/gfx/ogl4/models.cpp b/fggl/gfx/ogl4/models.cpp index 3849fb7..1f566ea 100644 --- a/fggl/gfx/ogl4/models.cpp +++ b/fggl/gfx/ogl4/models.cpp @@ -64,11 +64,11 @@ namespace fggl::gfx::ogl4 { modelComp.drawType = ogl::Primative::TRIANGLE; } - StaticModel* StaticModelRenderer::uploadMesh(assets::AssetGUID guid, const data::Mesh &mesh) { + StaticModel* StaticModelRenderer::uploadMesh(assets::AssetGUID guid, const data::Mesh &mesh, bool allowCache) { assert( m_assets != nullptr ); // if the asset has already been uploaded, we don't need to do anything - if ( m_assets->has(guid) ) { + if ( allowCache && m_assets->has(guid) ) { m_assets->require(guid); return m_assets->get<StaticModel>(guid); } @@ -80,7 +80,11 @@ namespace fggl::gfx::ogl4 { modelAsset->elements = setupIndexBuffer(modelAsset->vao, mesh.indexList()); modelAsset->elementCount = mesh.indexCount(); modelAsset->drawType = ogl::Primative::TRIANGLE; - m_assets->set(guid, modelAsset); + + // if caching is enabled, then use the cache + if ( allowCache ) { + m_assets->set(guid, modelAsset); + } return modelAsset; } @@ -106,8 +110,8 @@ namespace fggl::gfx::ogl4 { #ifdef FGGL_ALLOW_DEFERRED_UPLOAD void StaticModelRenderer::resolveModels(entity::EntityManager &world) { // FIXME: this needs something reactive or performance will suck. - auto renderables = world.find<data::StaticMesh>(); - for (const auto &renderable : renderables) { + auto renderableEnts = world.find<data::StaticMesh>(); + for (const auto &renderable : renderableEnts) { auto *currModel = world.tryGet<StaticModel>(renderable); if (currModel != nullptr) { continue; @@ -116,7 +120,7 @@ namespace fggl::gfx::ogl4 { auto &meshComp = world.get<data::StaticMesh>(renderable); // model loading (should be via asset system) - auto loadedModel = uploadMesh("DEFER_ENT_"+ std::to_string((uint64_t)renderable), meshComp.mesh); + auto loadedModel = uploadMesh("DEFER_ENT_"+ std::to_string((uint64_t)renderable), meshComp.mesh, false); auto loadedShader = m_shaders->get(meshComp.pipeline); // splice the loaded asset into the ecs diff --git a/include/fggl/gfx/ogl4/models.hpp b/include/fggl/gfx/ogl4/models.hpp index 1306735..42241dc 100644 --- a/include/fggl/gfx/ogl4/models.hpp +++ b/include/fggl/gfx/ogl4/models.hpp @@ -81,7 +81,7 @@ namespace fggl::gfx::ogl4 { StaticModelRenderer &operator=(const StaticModelRenderer &other) = delete; StaticModelRenderer &operator=(StaticModelRenderer &&other) = delete; - StaticModel* uploadMesh(assets::AssetGUID guid, const data::Mesh& mesh); + StaticModel* uploadMesh(assets::AssetGUID guid, const data::Mesh& mesh, bool allowCache=true); StaticModelGPU* uploadMesh2(const assets::AssetGUID& meshName, const data::Mesh& mesh); void render(entity::EntityManager &world) { -- GitLab