From 92e05b266c4c2b9c5265ae59d15478315bdd67c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Ker=C3=A4nen?= Date: Mon, 26 Oct 2015 19:34:17 +0200 Subject: [PATCH] Fixed|Model Renderer: Use model's atlas when drawing; fixed shutdown crash Also removed the default textures, since they would have to be allocated separately for each model, in the model's alloc group. Now that the shader can be changed, there is no reason to have optional textures: if a texture is missing, a warning will be logged. --- doomsday/apps/client/src/render/model.cpp | 3 +++ doomsday/apps/client/src/render/modelrenderer.cpp | 14 ++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/doomsday/apps/client/src/render/model.cpp b/doomsday/apps/client/src/render/model.cpp index a795ac1707..98d8f34cef 100644 --- a/doomsday/apps/client/src/render/model.cpp +++ b/doomsday/apps/client/src/render/model.cpp @@ -44,6 +44,9 @@ Model::AnimSequence::AnimSequence(String const &name, Record const &def) Model::~Model() { + // The commit group will be deleted now. + unsetAtlas(); + qDeleteAll(timelines.values()); } diff --git a/doomsday/apps/client/src/render/modelrenderer.cpp b/doomsday/apps/client/src/render/modelrenderer.cpp index 7fa42d09b7..18138e240d 100644 --- a/doomsday/apps/client/src/render/modelrenderer.cpp +++ b/doomsday/apps/client/src/render/modelrenderer.cpp @@ -89,7 +89,7 @@ DENG2_PIMPL(ModelRenderer) MultiAtlas atlasPool { *this }; - struct DefaultTextures + /*struct DefaultTextures { Id diffuse { Id::None }; Id normals { Id::None }; @@ -118,7 +118,7 @@ DENG2_PIMPL(ModelRenderer) specular = atlas.alloc(img); } }; - QHash defaultTextures; + QHash defaultTextures;*/ filesys::AssetObserver observer { "model\\..*" }; ModelBank bank { [] () -> ModelDrawable * { return new render::Model; } }; @@ -152,7 +152,7 @@ DENG2_PIMPL(ModelRenderer) bank.unloadAll(Bank::ImmediatelyInCurrentThread); atlasPool.clear(); - defaultTextures.clear(); + //defaultTextures.clear(); unloadProgram(*programs[SHADER_DEFAULT]); } @@ -166,7 +166,7 @@ DENG2_PIMPL(ModelRenderer) atlas->setMarginSize(0); // The default textures are present on each atlas. - defaultTextures[atlas].alloc(*atlas); + //defaultTextures[atlas].alloc(*atlas); return atlas; } @@ -256,13 +256,13 @@ DENG2_PIMPL(ModelRenderer) model.setAtlas(*model.textures); - DENG2_ASSERT(defaultTextures.contains(model.textures->atlas())); + /*DENG2_ASSERT(defaultTextures.contains(model.textures->atlas())); DefaultTextures &defaults = defaultTextures[model.textures->atlas()]; model.setDefaultTexture(ModelDrawable::Diffuse, defaults.diffuse); model.setDefaultTexture(ModelDrawable::Normals, defaults.normals); model.setDefaultTexture(ModelDrawable::Emissive, defaults.emission); - model.setDefaultTexture(ModelDrawable::Specular, defaults.specular); + model.setDefaultTexture(ModelDrawable::Specular, defaults.specular);*/ } static gl::Blend textToBlendFunc(String const &text) @@ -615,6 +615,8 @@ DENG2_PIMPL(ModelRenderer) template // generic to accommodate psprites and vispsprites void draw(Params const &p) { + uTex = static_cast(p.model->textures->atlas()); + p.model->draw(&p.animator->appearance(), p.animator); } };