#include <osg/Texture1D>
#include <osgUtil/HighlightMapGenerator>
+#include <OpenThreads/Mutex>
+#include <OpenThreads/ScopedLock>
+
#include <simgear/scene/util/SGUpdateVisitor.hxx>
-#include <simgear/threads/SGThread.hxx>
-#include <simgear/threads/SGGuard.hxx>
#include <simgear/props/condition.hxx>
#include <simgear/props/props.hxx>
#include "animation.hxx"
#include "model.hxx"
+
+using OpenThreads::Mutex;
+using OpenThreads::ScopedLock;
+
/*
<animation>
<type>shader</type>
// FIXME: need an update or callback ...
// generate the six highlight map images (light direction = [1, 1, -1])
osg::ref_ptr<osgUtil::HighlightMapGenerator> mapgen;
- mapgen = new osgUtil::HighlightMapGenerator(_lastLightDirection.osg(),
- _lastLightColor.osg(), 5);
+ mapgen = new osgUtil::HighlightMapGenerator(toOsg(_lastLightDirection),
+ toOsg(_lastLightColor), 5);
mapgen->generateMap();
// assign the six images to the texture object
SGVec4f _lastLightColor;
};
+static Mutex cubeMutex;
+
+#if 0
static osg::TextureCubeMap*
getOrCreateTextureCubeMap()
{
if (textureCubeMap.get())
return textureCubeMap.get();
- static SGMutex mutex;
- SGGuard<SGMutex> locker(mutex);
+ ScopedLock<Mutex> lock(cubeMutex);
if (textureCubeMap.get())
return textureCubeMap.get();
te->setOperand1_RGB(osg::TexEnvCombine::SRC_COLOR);
ss->setTextureAttributeAndModes(0, te, osg::StateAttribute::OVERRIDE | osg::StateAttribute::ON);
}
+#endif
SGShaderAnimation::SGShaderAnimation(const SGPropertyNode* configNode,
- SGPropertyNode* modelRoot) :
+ SGPropertyNode* modelRoot,
+ const osgDB::ReaderWriter::Options*
+ options) :
SGAnimation(configNode, modelRoot)
{
const SGPropertyNode* node = configNode->getChild("texture");
if (node)
- _effect_texture = SGLoadTexture2D(node->getStringValue());
+ _effect_texture = SGLoadTexture2D(node->getStringValue(), options);
}
namespace {
if (!combine)
return;
// An approximation for light reflected back by chrome.
- osg::Vec4 globalColor = (updateVisitor->getAmbientLight().osg() * .4f
- + updateVisitor->getDiffuseLight().osg());
+ osg::Vec4 globalColor = toOsg(updateVisitor->getAmbientLight() * .4f
+ + updateVisitor->getDiffuseLight());
globalColor.a() = 1.0f;
combine->setConstantColor(globalColor);
}
};
-typedef map<osg::ref_ptr<osg::Texture2D>, osg::ref_ptr<osg::StateSet> >
+typedef std::map<osg::ref_ptr<osg::Texture2D>, osg::ref_ptr<osg::StateSet> >
StateSetMap;
}
+static Mutex chromeMutex;
+
// The chrome effect is mixed by the alpha channel of the texture
// on the model, which will be attached to a node lower in the scene
// graph: 0 -> completely chrome, 1 -> completely model texture.
static void create_chrome(osg::Group* group, osg::Texture2D* texture)
{
- static SGMutex mutex;
- SGGuard<SGMutex> locker(mutex);
+ ScopedLock<Mutex> lock(chromeMutex);
static StateSetMap chromeMap;
osg::StateSet *stateSet;
StateSetMap::iterator iterator = chromeMap.find(texture);