Apply filtering settings to composite maps

This commit is contained in:
Alexei Kotov 2025-03-10 15:54:36 +03:00
parent acfe9b6785
commit ad996393f1
3 changed files with 28 additions and 2 deletions

View File

@ -19,6 +19,23 @@
namespace Terrain
{
struct UpdateTextureFilteringFunctor
{
UpdateTextureFilteringFunctor(Resource::SceneManager* sceneMgr)
: mSceneManager(sceneMgr)
{
}
Resource::SceneManager* mSceneManager;
void operator()(ChunkKey, osg::Object* obj)
{
TerrainDrawable* drawable = static_cast<TerrainDrawable*>(obj);
CompositeMap* composite = drawable->getCompositeMap();
if (composite && composite->mTexture)
mSceneManager->applyFilterSettings(composite->mTexture);
}
};
ChunkManager::ChunkManager(Storage* storage, Resource::SceneManager* sceneMgr, TextureManager* textureManager,
CompositeMapRenderer* renderer, ESM::RefId worldspace, double expiryDelay)
: GenericResourceManager<ChunkKey>(nullptr, expiryDelay)
@ -61,6 +78,12 @@ namespace Terrain
return node;
}
void ChunkManager::updateTextureFiltering()
{
UpdateTextureFilteringFunctor f(mSceneManager);
mCache->call(f);
}
void ChunkManager::reportStats(unsigned int frameNumber, osg::Stats* stats) const
{
Resource::reportStats("Terrain Chunk", frameNumber, mCache->getStats(), *stats);
@ -85,10 +108,9 @@ namespace Terrain
texture->setTextureWidth(mCompositeMapSize);
texture->setTextureHeight(mCompositeMapSize);
texture->setInternalFormat(GL_RGB);
texture->setFilter(osg::Texture::MIN_FILTER, osg::Texture::LINEAR);
texture->setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR);
texture->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_EDGE);
texture->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE);
mSceneManager->applyFilterSettings(texture);
return texture;
}

View File

@ -85,6 +85,8 @@ namespace Terrain
void setCompositeMapLevel(float level) { mCompositeMapLevel = level; }
void setMaxCompositeGeometrySize(float maxCompGeometrySize) { mMaxCompGeometrySize = maxCompGeometrySize; }
void updateTextureFiltering();
void setNodeMask(unsigned int mask) { mNodeMask = mask; }
unsigned int getNodeMask() override { return mNodeMask; }

View File

@ -133,6 +133,8 @@ namespace Terrain
{
if (mTextureManager)
mTextureManager->updateTextureFiltering();
if (mChunkManager)
mChunkManager->updateTextureFiltering();
}
void World::clearAssociatedCaches()