From 1afed48a2c90548e0b420c9c3d7d4af9e0734d1d Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Mon, 14 Nov 2011 22:07:42 +0200 Subject: [PATCH] Make possible and do update textures in node definitions after late texture atlas making --- src/client.cpp | 3 +++ src/nodedef.cpp | 15 +++++++++++++++ src/nodedef.h | 6 ++++++ src/tile.h | 3 ++- 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/client.cpp b/src/client.cpp index d0e5cd405..d5abcd7de 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -224,6 +224,9 @@ Client::Client( tsrc->buildMainAtlas(this); else infostream<<"Not building texture atlas."<updateTextures(tsrc); // NOTE: This should be done only after getting possible dynamic // game definitions from the server, or at least shut down and diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 74d825362..7b723e958 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -164,6 +164,21 @@ public: assert(c <= MAX_CONTENT); return &m_content_features[c]; } + virtual void updateTextures(ITextureSource *tsrc) + { +#ifndef SERVER + infostream<<"CNodeDefManager::updateTextures(): Updating " + <<"textures in node definitions"<updateAP(f->tiles[j].texture); + if(f->special_atlas) + tsrc->updateAP(*(f->special_atlas)); + } +#endif + } private: ContentFeatures m_content_features[MAX_CONTENT+1]; }; diff --git a/src/nodedef.h b/src/nodedef.h index dece63fcd..5aba69c48 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -320,6 +320,12 @@ public: // Register node definition virtual void set(content_t c, const ContentFeatures &def)=0; virtual ContentFeatures* getModifiable(content_t c)=0; + + /* + Update tile textures to latest return values of TextueSource. + Call after updating the texture atlas of a TextureSource. + */ + virtual void updateTextures(ITextureSource *tsrc)=0; }; // If textures not actually available (server), tsrc can be NULL diff --git a/src/tile.h b/src/tile.h index ac4e790b4..105692c10 100644 --- a/src/tile.h +++ b/src/tile.h @@ -138,6 +138,7 @@ public: {return AtlasPointer(0);} virtual video::ITexture* getTextureRaw(const std::string &name) {return NULL;} + virtual void updateAP(AtlasPointer &ap){}; }; class IWritableTextureSource : public ITextureSource @@ -153,8 +154,8 @@ public: {return AtlasPointer(0);} virtual video::ITexture* getTextureRaw(const std::string &name) {return NULL;} + virtual void updateAP(AtlasPointer &ap){}; - virtual void updateAP(AtlasPointer &ap)=0; virtual void buildMainAtlas(class IGameDef *gamedef)=0; virtual void processQueue()=0; };