Skip to content
Snippets Groups Projects
Commit ebf1b235 authored by Joseph Walton-Rivers's avatar Joseph Walton-Rivers
Browse files

don't cache between scenes

parent d8400bd7
No related branches found
No related tags found
No related merge requests found
...@@ -64,11 +64,11 @@ namespace fggl::gfx::ogl4 { ...@@ -64,11 +64,11 @@ namespace fggl::gfx::ogl4 {
modelComp.drawType = ogl::Primative::TRIANGLE; 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 ); assert( m_assets != nullptr );
// if the asset has already been uploaded, we don't need to do anything // 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); m_assets->require(guid);
return m_assets->get<StaticModel>(guid); return m_assets->get<StaticModel>(guid);
} }
...@@ -80,7 +80,11 @@ namespace fggl::gfx::ogl4 { ...@@ -80,7 +80,11 @@ namespace fggl::gfx::ogl4 {
modelAsset->elements = setupIndexBuffer(modelAsset->vao, mesh.indexList()); modelAsset->elements = setupIndexBuffer(modelAsset->vao, mesh.indexList());
modelAsset->elementCount = mesh.indexCount(); modelAsset->elementCount = mesh.indexCount();
modelAsset->drawType = ogl::Primative::TRIANGLE; 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; return modelAsset;
} }
...@@ -106,8 +110,8 @@ namespace fggl::gfx::ogl4 { ...@@ -106,8 +110,8 @@ namespace fggl::gfx::ogl4 {
#ifdef FGGL_ALLOW_DEFERRED_UPLOAD #ifdef FGGL_ALLOW_DEFERRED_UPLOAD
void StaticModelRenderer::resolveModels(entity::EntityManager &world) { void StaticModelRenderer::resolveModels(entity::EntityManager &world) {
// FIXME: this needs something reactive or performance will suck. // FIXME: this needs something reactive or performance will suck.
auto renderables = world.find<data::StaticMesh>(); auto renderableEnts = world.find<data::StaticMesh>();
for (const auto &renderable : renderables) { for (const auto &renderable : renderableEnts) {
auto *currModel = world.tryGet<StaticModel>(renderable); auto *currModel = world.tryGet<StaticModel>(renderable);
if (currModel != nullptr) { if (currModel != nullptr) {
continue; continue;
...@@ -116,7 +120,7 @@ namespace fggl::gfx::ogl4 { ...@@ -116,7 +120,7 @@ namespace fggl::gfx::ogl4 {
auto &meshComp = world.get<data::StaticMesh>(renderable); auto &meshComp = world.get<data::StaticMesh>(renderable);
// model loading (should be via asset system) // 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); auto loadedShader = m_shaders->get(meshComp.pipeline);
// splice the loaded asset into the ecs // splice the loaded asset into the ecs
......
...@@ -81,7 +81,7 @@ namespace fggl::gfx::ogl4 { ...@@ -81,7 +81,7 @@ namespace fggl::gfx::ogl4 {
StaticModelRenderer &operator=(const StaticModelRenderer &other) = delete; StaticModelRenderer &operator=(const StaticModelRenderer &other) = delete;
StaticModelRenderer &operator=(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); StaticModelGPU* uploadMesh2(const assets::AssetGUID& meshName, const data::Mesh& mesh);
void render(entity::EntityManager &world) { void render(entity::EntityManager &world) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment