diff --git a/fggl/gfx/ogl4/models.cpp b/fggl/gfx/ogl4/models.cpp index 3849fb77385ae8bf0750389b17fa4ac84316741c..1f566eab65a6959e31b2eaa1def3f4bfa997ee17 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 1306735f8f54cbe29f0ab548a20871dba47ece30..42241dce6de66403c6d72b3a34fe2d220f5a96e3 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) {