From 9f72c9392ecdab081fdad9956534c0ef81d1b2d7 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 20 Jun 2007 12:00:29 +0000 Subject: [PATCH] Added code of support for contouring shaders --- include/osgTerrain/GeometryTechnique | 5 +++++ src/osgTerrain/GeometryTechnique.cpp | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/include/osgTerrain/GeometryTechnique b/include/osgTerrain/GeometryTechnique index 7ed250e4a..343d10c96 100644 --- a/include/osgTerrain/GeometryTechnique +++ b/include/osgTerrain/GeometryTechnique @@ -109,6 +109,9 @@ class OSGTERRAIN_EXPORT GeometryTechnique : public TerrainTechnique + void setFilterBias(float filterBias); + float getFilterBias() const { return _filterBias; } + void setFilterWidth(float filterWidth); float getFilterWidth() const { return _filterWidth; } @@ -136,6 +139,8 @@ class OSGTERRAIN_EXPORT GeometryTechnique : public TerrainTechnique osg::ref_ptr _terrainGeometry; osg::ref_ptr _geometry; + float _filterBias; + osg::ref_ptr _filterBiasUniform; float _filterWidth; osg::ref_ptr _filterWidthUniform; osg::Matrix3 _filterMatrix; diff --git a/src/osgTerrain/GeometryTechnique.cpp b/src/osgTerrain/GeometryTechnique.cpp index 8a5e97429..f83a8a4f7 100644 --- a/src/osgTerrain/GeometryTechnique.cpp +++ b/src/osgTerrain/GeometryTechnique.cpp @@ -29,6 +29,7 @@ using namespace osgTerrain; GeometryTechnique::GeometryTechnique() { + setFilterBias(0); setFilterWidth(0.1); setFilterMatrixAs(GAUSSIAN); } @@ -42,6 +43,13 @@ GeometryTechnique::~GeometryTechnique() { } +void GeometryTechnique::setFilterBias(float filterBias) +{ + _filterBias = filterBias; + if (!_filterBiasUniform) _filterBiasUniform = new osg::Uniform("filterBias",_filterBias); + else _filterBiasUniform->set(filterBias); +} + void GeometryTechnique::setFilterWidth(float filterWidth) { _filterWidth = filterWidth; @@ -418,6 +426,7 @@ void GeometryTechnique::init() texture2D->setResizeNonPowerOfTwoHint(false); stateset->setTextureAttributeAndModes(color_index, texture2D, osg::StateAttribute::ON); + texture2D->setFilter(osg::Texture::MIN_FILTER, osg::Texture::LINEAR_MIPMAP_LINEAR); texture2D->setFilter(osg::Texture::MAG_FILTER, filter==TerrainNode::LINEAR ? osg::Texture::LINEAR : osg::Texture::NEAREST); if (tf) @@ -485,6 +494,7 @@ void GeometryTechnique::init() stateset->addUniform(_filterWidthUniform.get()); stateset->addUniform(_filterMatrixUniform.get()); + stateset->addUniform(_filterBiasUniform.get()); osg::Uniform* lightingEnabled = new osg::Uniform("lightingEnabled",true); stateset->addUniform(lightingEnabled);