mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-16 19:19:56 +00:00
Fix terrain error in OpenCS
This commit is contained in:
parent
7071d286e8
commit
6a0ac824bd
6 changed files with 24 additions and 11 deletions
|
@ -193,7 +193,7 @@ namespace MWRender
|
|||
mWater.reset(new Water(mRootNode, sceneRoot, mResourceSystem, mViewer->getIncrementalCompileOperation(), fallback, resourcePath));
|
||||
|
||||
mTerrain.reset(new Terrain::TerrainGrid(sceneRoot, mResourceSystem, mViewer->getIncrementalCompileOperation(),
|
||||
new TerrainStorage(mResourceSystem->getVFS(), false), Mask_Terrain, mUnrefQueue.get()));
|
||||
new TerrainStorage(mResourceSystem->getVFS(), false), Mask_Terrain, &mResourceSystem->getSceneManager()->getShaderManager(), mUnrefQueue.get()));
|
||||
|
||||
mCamera.reset(new Camera(mViewer->getCamera()));
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <osg/ref_ptr>
|
||||
#include <osg/Array>
|
||||
#include <osg/PrimitiveSet>
|
||||
|
||||
#include <map>
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ namespace Terrain
|
|||
}
|
||||
}
|
||||
|
||||
Effect::Effect(bool useShaders, bool forcePerPixelLighting, bool clampLighting, Shader::ShaderManager& shaderManager, const std::vector<TextureLayer> &layers, const std::vector<osg::ref_ptr<osg::Texture2D> > &blendmaps,
|
||||
Effect::Effect(bool useShaders, bool forcePerPixelLighting, bool clampLighting, Shader::ShaderManager* shaderManager, const std::vector<TextureLayer> &layers, const std::vector<osg::ref_ptr<osg::Texture2D> > &blendmaps,
|
||||
int blendmapScale, float layerTileSize)
|
||||
: mShaderManager(shaderManager)
|
||||
, mUseShaders(useShaders)
|
||||
|
@ -161,8 +161,8 @@ namespace Terrain
|
|||
{
|
||||
try
|
||||
{
|
||||
if (mUseShaders)
|
||||
addTechnique(new ShaderTechnique(mShaderManager, mForcePerPixelLighting, mClampLighting, mLayers, mBlendmaps, mBlendmapScale, mLayerTileSize));
|
||||
if (mUseShaders && mShaderManager)
|
||||
addTechnique(new ShaderTechnique(*mShaderManager, mForcePerPixelLighting, mClampLighting, mLayers, mBlendmaps, mBlendmapScale, mLayerTileSize));
|
||||
else
|
||||
addTechnique(new FixedFunctionTechnique(mLayers, mBlendmaps, mBlendmapScale, mLayerTileSize));
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ namespace Terrain
|
|||
class Effect : public osgFX::Effect
|
||||
{
|
||||
public:
|
||||
Effect(bool useShaders, bool forcePerPixelLighting, bool clampLighting, Shader::ShaderManager& shaderManager,
|
||||
Effect(bool useShaders, bool forcePerPixelLighting, bool clampLighting, Shader::ShaderManager* shaderManager,
|
||||
const std::vector<TextureLayer>& layers,
|
||||
const std::vector<osg::ref_ptr<osg::Texture2D> >& blendmaps, int blendmapScale, float layerTileSize);
|
||||
|
||||
|
@ -70,7 +70,7 @@ namespace Terrain
|
|||
}
|
||||
|
||||
private:
|
||||
Shader::ShaderManager& mShaderManager;
|
||||
Shader::ShaderManager* mShaderManager;
|
||||
bool mUseShaders;
|
||||
bool mForcePerPixelLighting;
|
||||
bool mClampLighting;
|
||||
|
|
|
@ -51,11 +51,12 @@ namespace
|
|||
namespace Terrain
|
||||
{
|
||||
|
||||
TerrainGrid::TerrainGrid(osg::Group* parent, Resource::ResourceSystem* resourceSystem, osgUtil::IncrementalCompileOperation* ico, Storage* storage, int nodeMask, SceneUtil::UnrefQueue* unrefQueue)
|
||||
TerrainGrid::TerrainGrid(osg::Group* parent, Resource::ResourceSystem* resourceSystem, osgUtil::IncrementalCompileOperation* ico, Storage* storage, int nodeMask, Shader::ShaderManager* shaderManager, SceneUtil::UnrefQueue* unrefQueue)
|
||||
: Terrain::World(parent, resourceSystem, ico, storage, nodeMask)
|
||||
, mNumSplits(4)
|
||||
, mCache((storage->getCellVertices()-1)/static_cast<float>(mNumSplits) + 1)
|
||||
, mUnrefQueue(unrefQueue)
|
||||
, mShaderManager(shaderManager)
|
||||
{
|
||||
osg::ref_ptr<osg::Material> material (new osg::Material);
|
||||
material->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE);
|
||||
|
@ -211,8 +212,8 @@ osg::ref_ptr<osg::Node> TerrainGrid::buildTerrain (osg::Group* parent, float chu
|
|||
geometry->setTexCoordArray(i, mCache.getUVBuffer());
|
||||
|
||||
float blendmapScale = ESM::Land::LAND_TEXTURE_SIZE*chunkSize;
|
||||
osg::ref_ptr<osgFX::Effect> effect (new Terrain::Effect(useShaders, mResourceSystem->getSceneManager()->getForcePerPixelLighting(), mResourceSystem->getSceneManager()->getClampLighting(),
|
||||
mResourceSystem->getSceneManager()->getShaderManager(), layers, blendmapTextures, blendmapScale, blendmapScale));
|
||||
osg::ref_ptr<osgFX::Effect> effect (new Terrain::Effect(mShaderManager ? useShaders : false, mResourceSystem->getSceneManager()->getForcePerPixelLighting(), mResourceSystem->getSceneManager()->getClampLighting(),
|
||||
mShaderManager, layers, blendmapTextures, blendmapScale, blendmapScale));
|
||||
|
||||
effect->addCullCallback(new SceneUtil::LightListCallback);
|
||||
|
||||
|
|
|
@ -4,13 +4,22 @@
|
|||
#include <osg/Vec2f>
|
||||
|
||||
#include "world.hpp"
|
||||
#include "material.hpp"
|
||||
|
||||
namespace SceneUtil
|
||||
{
|
||||
class UnrefQueue;
|
||||
}
|
||||
|
||||
namespace Shader
|
||||
{
|
||||
class ShaderManager;
|
||||
}
|
||||
|
||||
namespace osg
|
||||
{
|
||||
class Texture2D;
|
||||
}
|
||||
|
||||
namespace Terrain
|
||||
{
|
||||
|
||||
|
@ -18,7 +27,7 @@ namespace Terrain
|
|||
class TerrainGrid : public Terrain::World
|
||||
{
|
||||
public:
|
||||
TerrainGrid(osg::Group* parent, Resource::ResourceSystem* resourceSystem, osgUtil::IncrementalCompileOperation* ico, Storage* storage, int nodeMask, SceneUtil::UnrefQueue* unrefQueue = NULL);
|
||||
TerrainGrid(osg::Group* parent, Resource::ResourceSystem* resourceSystem, osgUtil::IncrementalCompileOperation* ico, Storage* storage, int nodeMask, Shader::ShaderManager* shaderManager = NULL, SceneUtil::UnrefQueue* unrefQueue = NULL);
|
||||
~TerrainGrid();
|
||||
|
||||
/// Load a terrain cell and store it in cache for later use.
|
||||
|
@ -59,6 +68,8 @@ namespace Terrain
|
|||
BufferCache mCache;
|
||||
|
||||
osg::ref_ptr<SceneUtil::UnrefQueue> mUnrefQueue;
|
||||
|
||||
Shader::ShaderManager* mShaderManager;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue