mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-09-09 12:25:17 -04:00
Apply filtering settings to composite maps
This commit is contained in:
parent
acfe9b6785
commit
ad996393f1
@ -19,6 +19,23 @@
|
|||||||
namespace Terrain
|
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,
|
ChunkManager::ChunkManager(Storage* storage, Resource::SceneManager* sceneMgr, TextureManager* textureManager,
|
||||||
CompositeMapRenderer* renderer, ESM::RefId worldspace, double expiryDelay)
|
CompositeMapRenderer* renderer, ESM::RefId worldspace, double expiryDelay)
|
||||||
: GenericResourceManager<ChunkKey>(nullptr, expiryDelay)
|
: GenericResourceManager<ChunkKey>(nullptr, expiryDelay)
|
||||||
@ -61,6 +78,12 @@ namespace Terrain
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChunkManager::updateTextureFiltering()
|
||||||
|
{
|
||||||
|
UpdateTextureFilteringFunctor f(mSceneManager);
|
||||||
|
mCache->call(f);
|
||||||
|
}
|
||||||
|
|
||||||
void ChunkManager::reportStats(unsigned int frameNumber, osg::Stats* stats) const
|
void ChunkManager::reportStats(unsigned int frameNumber, osg::Stats* stats) const
|
||||||
{
|
{
|
||||||
Resource::reportStats("Terrain Chunk", frameNumber, mCache->getStats(), *stats);
|
Resource::reportStats("Terrain Chunk", frameNumber, mCache->getStats(), *stats);
|
||||||
@ -85,10 +108,9 @@ namespace Terrain
|
|||||||
texture->setTextureWidth(mCompositeMapSize);
|
texture->setTextureWidth(mCompositeMapSize);
|
||||||
texture->setTextureHeight(mCompositeMapSize);
|
texture->setTextureHeight(mCompositeMapSize);
|
||||||
texture->setInternalFormat(GL_RGB);
|
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_S, osg::Texture::CLAMP_TO_EDGE);
|
||||||
texture->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE);
|
texture->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE);
|
||||||
|
mSceneManager->applyFilterSettings(texture);
|
||||||
|
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
@ -85,6 +85,8 @@ namespace Terrain
|
|||||||
void setCompositeMapLevel(float level) { mCompositeMapLevel = level; }
|
void setCompositeMapLevel(float level) { mCompositeMapLevel = level; }
|
||||||
void setMaxCompositeGeometrySize(float maxCompGeometrySize) { mMaxCompGeometrySize = maxCompGeometrySize; }
|
void setMaxCompositeGeometrySize(float maxCompGeometrySize) { mMaxCompGeometrySize = maxCompGeometrySize; }
|
||||||
|
|
||||||
|
void updateTextureFiltering();
|
||||||
|
|
||||||
void setNodeMask(unsigned int mask) { mNodeMask = mask; }
|
void setNodeMask(unsigned int mask) { mNodeMask = mask; }
|
||||||
unsigned int getNodeMask() override { return mNodeMask; }
|
unsigned int getNodeMask() override { return mNodeMask; }
|
||||||
|
|
||||||
|
@ -133,6 +133,8 @@ namespace Terrain
|
|||||||
{
|
{
|
||||||
if (mTextureManager)
|
if (mTextureManager)
|
||||||
mTextureManager->updateTextureFiltering();
|
mTextureManager->updateTextureFiltering();
|
||||||
|
if (mChunkManager)
|
||||||
|
mChunkManager->updateTextureFiltering();
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::clearAssociatedCaches()
|
void World::clearAssociatedCaches()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user