openmw-tes3coop/apps/openmw/mwrender/terrainmaterial.cpp
2012-07-13 06:16:55 +02:00

82 lines
2.7 KiB
C++

#include "terrainmaterial.hpp"
#include <OgreTerrain.h>
#include <extern/shiny/Main/Factory.hpp>
namespace MWRender
{
TerrainMaterial::TerrainMaterial()
{
mLayerDecl.samplers.push_back(Ogre::TerrainLayerSampler("albedo_specular", Ogre::PF_BYTE_RGBA));
//mLayerDecl.samplers.push_back(Ogre::TerrainLayerSampler("normal_height", Ogre::PF_BYTE_RGBA));
mLayerDecl.elements.push_back(
Ogre::TerrainLayerSamplerElement(0, Ogre::TLSS_ALBEDO, 0, 3));
//mLayerDecl.elements.push_back(
// Ogre::TerrainLayerSamplerElement(0, Ogre::TLSS_SPECULAR, 3, 1));
//mLayerDecl.elements.push_back(
// Ogre::TerrainLayerSamplerElement(1, Ogre::TLSS_NORMAL, 0, 3));
//mLayerDecl.elements.push_back(
// Ogre::TerrainLayerSamplerElement(1, Ogre::TLSS_HEIGHT, 3, 1));
mProfiles.push_back(OGRE_NEW Profile(this, "SM2", "Profile for rendering on Shader Model 2 capable cards"));
setActiveProfile("SM2");
}
// -----------------------------------------------------------------------------------------------------------------------
TerrainMaterial::Profile::Profile(Ogre::TerrainMaterialGenerator* parent, const Ogre::String& name, const Ogre::String& desc)
: Ogre::TerrainMaterialGenerator::Profile(parent, name, desc)
{
}
TerrainMaterial::Profile::~Profile()
{
}
Ogre::MaterialPtr TerrainMaterial::Profile::generate(const Ogre::Terrain* terrain)
{
const Ogre::String& matName = terrain->getMaterialName();
Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().getByName(matName);
if (!mat.isNull())
Ogre::MaterialManager::getSingleton().remove(matName);
sh::MaterialInstance* m = sh::Factory::getInstance().createMaterialInstance (matName);
return Ogre::MaterialManager::getSingleton().getByName(matName);
}
Ogre::MaterialPtr TerrainMaterial::Profile::generateForCompositeMap(const Ogre::Terrain* terrain)
{
throw std::runtime_error ("composite map not supported");
}
Ogre::uint8 TerrainMaterial::Profile::getMaxLayers(const Ogre::Terrain* terrain) const
{
return 32;
}
void TerrainMaterial::Profile::updateParams(const Ogre::MaterialPtr& mat, const Ogre::Terrain* terrain)
{
}
void TerrainMaterial::Profile::updateParamsForCompositeMap(const Ogre::MaterialPtr& mat, const Ogre::Terrain* terrain)
{
}
void TerrainMaterial::Profile::requestOptions(Ogre::Terrain* terrain)
{
terrain->_setMorphRequired(true);
terrain->_setNormalMapRequired(false);
terrain->_setLightMapRequired(false);
terrain->_setCompositeMapRequired(false);
}
}