Make possible and do update textures in node definitions after late texture atlas making

This commit is contained in:
Perttu Ahola 2011-11-14 22:07:42 +02:00
parent c6fd2986d4
commit 1afed48a2c
4 changed files with 26 additions and 1 deletions

@ -224,6 +224,9 @@ Client::Client(
tsrc->buildMainAtlas(this); tsrc->buildMainAtlas(this);
else else
infostream<<"Not building texture atlas."<<std::endl; infostream<<"Not building texture atlas."<<std::endl;
// Update textures
m_nodedef->updateTextures(tsrc);
// NOTE: This should be done only after getting possible dynamic // NOTE: This should be done only after getting possible dynamic
// game definitions from the server, or at least shut down and // game definitions from the server, or at least shut down and

@ -164,6 +164,21 @@ public:
assert(c <= MAX_CONTENT); assert(c <= MAX_CONTENT);
return &m_content_features[c]; return &m_content_features[c];
} }
virtual void updateTextures(ITextureSource *tsrc)
{
#ifndef SERVER
infostream<<"CNodeDefManager::updateTextures(): Updating "
<<"textures in node definitions"<<std::endl;
for(u16 i=0; i<=MAX_CONTENT; i++)
{
ContentFeatures *f = &m_content_features[i];
for(u16 j=0; j<6; j++)
tsrc->updateAP(f->tiles[j].texture);
if(f->special_atlas)
tsrc->updateAP(*(f->special_atlas));
}
#endif
}
private: private:
ContentFeatures m_content_features[MAX_CONTENT+1]; ContentFeatures m_content_features[MAX_CONTENT+1];
}; };

@ -320,6 +320,12 @@ public:
// Register node definition // Register node definition
virtual void set(content_t c, const ContentFeatures &def)=0; virtual void set(content_t c, const ContentFeatures &def)=0;
virtual ContentFeatures* getModifiable(content_t c)=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 // If textures not actually available (server), tsrc can be NULL

@ -138,6 +138,7 @@ public:
{return AtlasPointer(0);} {return AtlasPointer(0);}
virtual video::ITexture* getTextureRaw(const std::string &name) virtual video::ITexture* getTextureRaw(const std::string &name)
{return NULL;} {return NULL;}
virtual void updateAP(AtlasPointer &ap){};
}; };
class IWritableTextureSource : public ITextureSource class IWritableTextureSource : public ITextureSource
@ -153,8 +154,8 @@ public:
{return AtlasPointer(0);} {return AtlasPointer(0);}
virtual video::ITexture* getTextureRaw(const std::string &name) virtual video::ITexture* getTextureRaw(const std::string &name)
{return NULL;} {return NULL;}
virtual void updateAP(AtlasPointer &ap){};
virtual void updateAP(AtlasPointer &ap)=0;
virtual void buildMainAtlas(class IGameDef *gamedef)=0; virtual void buildMainAtlas(class IGameDef *gamedef)=0;
virtual void processQueue()=0; virtual void processQueue()=0;
}; };