本文整理汇总了C++中VirtualProgram::setName方法的典型用法代码示例。如果您正苦于以下问题:C++ VirtualProgram::setName方法的具体用法?C++ VirtualProgram::setName怎么用?C++ VirtualProgram::setName使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VirtualProgram
的用法示例。
在下文中一共展示了VirtualProgram::setName方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: optimizeStateSharing
void
ShaderGenerator::run(osg::Node* graph,
const std::string& vpName,
StateSetCache* cache)
{
if ( graph )
{
// generate shaders:
graph->accept( *this );
// perform GL state sharing
optimizeStateSharing( graph, cache );
osg::StateSet* stateset = cloneOrCreateStateSet(graph);
// install a blank VP at the top as the default.
VirtualProgram* vp = VirtualProgram::get(stateset);
if ( !vp )
{
vp = VirtualProgram::getOrCreate(stateset);
vp->setInheritShaders( true );
vp->setName( vpName );
}
}
}
示例2: Stringify
void
ShaderGenerator::run(osg::Node* graph, StateSetCache* cache)
{
if ( graph )
{
_texImageUnits.clear();
// generate shaders:
graph->accept( *this );
// perform GL state sharing
if ( cache )
cache->optimize( graph );
osg::StateSet* stateset = graph->getOrCreateStateSet();
// install a blank VP at the top as the default.
VirtualProgram* vp = VirtualProgram::get(stateset);
if ( !vp )
{
vp = VirtualProgram::getOrCreate(stateset);
vp->setInheritShaders( true );
vp->setName( _name );
}
// apply a uniform for each sampler binding we found.
for(std::set<int>::iterator i = _texImageUnits.begin(); i != _texImageUnits.end(); ++i)
{
std::string name = Stringify() << SAMPLER << *i;
stateset->addUniform( new osg::Uniform(name.c_str(), *i) );
}
_texImageUnits.clear();
}
}
示例3:
void
LODBlending::onInstall(TerrainEngineNode* engine)
{
if ( engine )
{
// need the parent textures for blending.
engine->requireParentTextures();
osg::StateSet* stateset = engine->getOrCreateStateSet();
stateset->addUniform( _delayUniform.get() );
stateset->addUniform( _durationUniform.get() );
stateset->addUniform( _vscaleUniform.get() );
VirtualProgram* vp = VirtualProgram::getOrCreate(stateset);
vp->setName( "osgEarth::Util::LODBlending" );
if ( _blendElevation == true )
{
vp->setFunction("oe_lodblend_elevation_vertex", vs_elevation, ShaderComp::LOCATION_VERTEX_MODEL );
}
if ( _blendImagery == true )
{
vp->setFunction("oe_lodblend_imagery_vertex", vs_imagery, ShaderComp::LOCATION_VERTEX_VIEW);
vp->setFunction("oe_lodblend_imagery_fragment", fs_imagery, ShaderComp::LOCATION_FRAGMENT_COLORING);
}
OE_INFO << LC << "On!\n";
}
}
示例4: attach
void FogEffect::attach( osg::StateSet* stateSet )
{
VirtualProgram* vp = VirtualProgram::getOrCreate( stateSet );
vp->setName("Fog");
Shaders pkg;
pkg.load( vp, pkg.Fog_Vertex );
pkg.load( vp, pkg.Fog_Fragment );
_statesets.push_back(stateSet);
}
示例5:
bool
ShaderGenerator::processText(const osg::StateSet* ss, osg::ref_ptr<osg::StateSet>& replacement)
{
// do nothing if there's no GLSL support
if ( !_active )
return false;
// State object with extra accessors:
StateEx* state = static_cast<StateEx*>(_state.get());
// check for a real osg::Program. If it exists, bail out so that OSG
// can use the program already in the graph
osg::StateAttribute* program = state->getAttribute(osg::StateAttribute::PROGRAM);
if ( dynamic_cast<osg::Program*>(program) != 0L )
return false;
// new state set:
replacement = ss ? osg::clone(ss, osg::CopyOp::SHALLOW_COPY) : new osg::StateSet();
// new VP:
VirtualProgram* vp = 0L;
if ( VirtualProgram::get(replacement.get()) )
vp = osg::clone(VirtualProgram::get(replacement.get()), osg::CopyOp::DEEP_COPY_ALL);
else
vp = VirtualProgram::getOrCreate(replacement.get());
if ( vp->referenceCount() == 1 )
vp->setName( _name );
std::string vertSrc =
"#version " GLSL_VERSION_STR "\n" GLSL_PRECISION "\n"
"varying " MEDIUMP "vec4 " TEX_COORD_TEXT ";\n"
"void " VERTEX_FUNCTION "(inout vec4 vertexVIEW)\n"
"{ \n"
INDENT TEX_COORD_TEXT " = gl_MultiTexCoord0;\n"
"} \n";
std::string fragSrc =
"#version " GLSL_VERSION_STR "\n" GLSL_PRECISION "\n"
"uniform sampler2D " SAMPLER_TEXT ";\n"
"varying " MEDIUMP "vec4 " TEX_COORD_TEXT ";\n"
"void " FRAGMENT_FUNCTION "(inout vec4 color)\n"
"{ \n"
INDENT MEDIUMP "vec4 texel = texture2D(" SAMPLER_TEXT ", " TEX_COORD_TEXT ".xy);\n"
INDENT "color.a *= texel.a; \n"
"}\n";
vp->setFunction( VERTEX_FUNCTION, vertSrc, ShaderComp::LOCATION_VERTEX_VIEW );
vp->setFunction( FRAGMENT_FUNCTION, fragSrc, ShaderComp::LOCATION_FRAGMENT_COLORING );
replacement->getOrCreateUniform( SAMPLER_TEXT, osg::Uniform::SAMPLER_2D )->set( 0 );
return replacement.valid();
}
示例6:
void
PhongLightingEffect::attach(osg::StateSet* stateset)
{
if ( stateset && _supported )
{
_statesets.push_back(stateset);
VirtualProgram* vp = VirtualProgram::getOrCreate(stateset);
vp->setName( "osgEarth.PhongLightingEffect" );
vp->setFunction( "oe_phong_vertex", Phong_Vertex, ShaderComp::LOCATION_VERTEX_VIEW, 0.5f );
vp->setFunction( "oe_phong_fragment", Phong_Fragment, ShaderComp::LOCATION_FRAGMENT_LIGHTING, 0.5f);
if ( _lightingUniform.valid() )
stateset->addUniform( _lightingUniform.get() );
}
}
示例7: VirtualProgram
void
OverlayDecorator::initSubgraphShaders( PerViewData& pvd )
{
osg::StateSet* set = pvd._subgraphStateSet.get();
VirtualProgram* vp = new VirtualProgram();
vp->setName( "OverlayDecorator subgraph shader" );
set->setAttributeAndModes( vp, osg::StateAttribute::ON );
// sampler for projected texture:
set->getOrCreateUniform( "oe_overlay_ProjTex", osg::Uniform::SAMPLER_2D )->set( *_textureUnit );
// the texture projection matrix uniform.
pvd._texGenUniform = set->getOrCreateUniform( "oe_overlay_TexGenMatrix", osg::Uniform::FLOAT_MAT4 );
// vertex shader - subgraph
std::string vertexSource = Stringify()
<< "#version " << GLSL_VERSION_STR << "\n"
#ifdef OSG_GLES2_AVAILABLE
<< "precision mediump float;\n"
#endif
<< "uniform mat4 oe_overlay_TexGenMatrix; \n"
<< "uniform mat4 osg_ViewMatrixInverse; \n"
<< "varying vec4 osg_TexCoord[" << Registry::capabilities().getMaxGPUTextureCoordSets() << "]; \n"
<< "void oe_overlay_vertex(void) \n"
<< "{ \n"
<< " osg_TexCoord["<< *_textureUnit << "] = oe_overlay_TexGenMatrix * osg_ViewMatrixInverse * gl_ModelViewMatrix * gl_Vertex; \n"
<< "} \n";
vp->setFunction( "oe_overlay_vertex", vertexSource, ShaderComp::LOCATION_VERTEX_POST_LIGHTING );
// fragment shader - subgraph
std::string fragmentSource = Stringify()
<< "#version " << GLSL_VERSION_STR << "\n"
#ifdef OSG_GLES2_AVAILABLE
<< "precision mediump float;\n"
#endif
<< "uniform sampler2D oe_overlay_ProjTex; \n"
<< "varying vec4 osg_TexCoord[" << Registry::capabilities().getMaxGPUTextureCoordSets() << "]; \n"
<< "void oe_overlay_fragment( inout vec4 color ) \n"
<< "{ \n"
<< " vec2 texCoord = osg_TexCoord["<< *_textureUnit << "].xy / osg_TexCoord["<< *_textureUnit << "].q; \n"
<< " vec4 texel = texture2D(oe_overlay_ProjTex, texCoord); \n"
<< " color = vec4( mix( color.rgb, texel.rgb, texel.a ), color.a); \n"
<< "} \n";
vp->setFunction( "oe_overlay_fragment", fragmentSource, ShaderComp::LOCATION_FRAGMENT_POST_LIGHTING );
}
示例8:
void
AlphaEffect::install(osg::StateSet* stateset)
{
if (stateset)
{
VirtualProgram* vp = VirtualProgram::getOrCreate(stateset);
if (vp)
{
vp->setName( "osgEarth.AlphaEffect" );
Shaders pkg;
pkg.load(vp, pkg.AlphaEffectFragment);
stateset->addUniform(_alphaUniform.get());
}
}
}
示例9: VirtualProgram
void
OceanCompositor::updateMasterStateSet(osg::StateSet* stateSet,
const TextureLayout& layout ) const
{
VirtualProgram* vp = static_cast<VirtualProgram*>( stateSet->getAttribute(VirtualProgram::SA_TYPE) );
if ( !vp )
{
vp = new VirtualProgram();
vp->setName("osgEarth OceanCompositor");
stateSet->setAttributeAndModes( vp, 1 );
}
vp->installDefaultLightingShaders();
vp->setShader( "osgearth_vert_setupColoring", new osg::Shader(osg::Shader::VERTEX, source_setupColoring) );
vp->setShader( "osgearth_frag_applyColoring", new osg::Shader(osg::Shader::FRAGMENT, source_applyColoring ) );
}
示例10: VirtualProgram
VirtualProgram*
RTTPicker::createRTTProgram()
{
VirtualProgram* vp = new VirtualProgram();
vp->setName( "osgEarth::RTTPicker" );
// Install RTT picker shaders:
ShaderPackage pickShaders;
pickShaders.add( "RTTPicker.vert.glsl", pickVertexEncode );
pickShaders.add( "RTTPicker.frag.glsl", pickFragment );
pickShaders.loadAll( vp );
// Install shaders and bindings from the ObjectIndex:
Registry::objectIndex()->loadShaders( vp );
return vp;
}
示例11: VirtualProgram
void
OSGTerrainEngineNode::updateTextureCombining()
{
if ( _texCompositor.valid() )
{
int numImageLayers = _update_mapf->imageLayers().size();
osg::StateSet* terrainStateSet = _terrain->getOrCreateStateSet();
if ( _texCompositor->usesShaderComposition() )
{
// Creates or updates the shader components that are generated by the texture compositor.
// These components reside in the CustomTerrain's stateset, and override the components
// installed in the VP on the engine-node's stateset in installShaders().
VirtualProgram* vp = new VirtualProgram() ;
vp->setName( "engine_osgterrain:TerrainNode" );
vp->installDefaultColoringShaders(numImageLayers);
terrainStateSet->setAttributeAndModes( vp, osg::StateAttribute::ON );
// first, update the default shader components based on the new layer count:
const ShaderFactory* sf = Registry::instance()->getShaderFactory();
// second, install the per-layer color filter functions.
for( int i=0; i<numImageLayers; ++i )
{
std::string layerFilterFunc = Stringify() << "osgearth_runColorFilters_" << i;
const ColorFilterChain& chain = _update_mapf->getImageLayerAt(i)->getColorFilters();
// install the wrapper function that calls all the filters in turn:
vp->setShader( layerFilterFunc, sf->createColorFilterChainFragmentShader(layerFilterFunc, chain) );
// install each of the filter entry points:
for( ColorFilterChain::const_iterator j = chain.begin(); j != chain.end(); ++j )
{
const ColorFilter* filter = j->get();
filter->install( terrainStateSet );
}
}
}
// next, inform the compositor that it needs to update based on a new layer count:
_texCompositor->updateMasterStateSet( terrainStateSet ); //, numImageLayers );
}
}
示例12: apply
void
ShaderGenerator::apply(osg::ClipNode& node)
{
static const char* s_clip_source =
"#version " GLSL_VERSION_STR "\n"
"void oe_sg_set_clipvertex(inout vec4 vertexVIEW)\n"
"{\n"
" gl_ClipVertex = vertexVIEW; \n"
"}\n";
if ( !_active ) return;
VirtualProgram* vp = VirtualProgram::getOrCreate(node.getOrCreateStateSet());
if ( vp->referenceCount() == 1 ) vp->setName( _name );
vp->setFunction( "oe_sg_set_clipvertex", s_clip_source, ShaderComp::LOCATION_VERTEX_VIEW );
apply( static_cast<osg::Group&>(node) );
}
示例13: ElevationChangedCallback
RexTerrainEngineNode::RexTerrainEngineNode() :
TerrainEngineNode ( ),
_terrain ( 0L ),
_tileCount ( 0 ),
_tileCreationTime ( 0.0 ),
_batchUpdateInProgress( false ),
_refreshRequired ( false ),
_stateUpdateRequired ( false )
{
// Necessary for pager object data
this->setName("osgEarth.RexTerrainEngineNode");
// unique ID for this engine:
_uid = Registry::instance()->createUID();
// always require elevation.
_requireElevationTextures = true;
// install an elevation callback so we can update elevation data
_elevationCallback = new ElevationChangedCallback( this );
// static shaders.
if ( Registry::capabilities().supportsGLSL() )
{
osg::StateSet* stateset = getOrCreateStateSet();
VirtualProgram* vp = VirtualProgram::getOrCreate(stateset);
vp->setName("RexTerrainEngineNode");
vp->setIsAbstract(true); // cannot run by itself, requires additional children
Shaders package;
package.load(vp, package.SDK);
}
// TODO: replace with a "renderer" object that can return statesets
// for different layer types, or something.
_imageLayerStateSet = new osg::StateSet();
}
示例14: lock
void
Text::setFont(osg::ref_ptr<osgText::Font> font)
{
if (_font.get() == font.get())
return;
#if OSG_VERSION_GREATER_OR_EQUAL(3,5,8)
osgText::Text::setFont(font);
#else
static Threading::Mutex mutex;
Threading::ScopedMutexLock lock(mutex);
osg::StateSet* previousFontStateSet = _font.valid() ? _font->getStateSet() : osgText::Font::getDefaultFont()->getStateSet();
osg::StateSet* newFontStateSet = font.valid() ? font->getStateSet() : osgText::Font::getDefaultFont()->getStateSet();
//if (getStateSet() == previousFontStateSet)
{
if (newFontStateSet && VirtualProgram::get(newFontStateSet) == 0L)
{
VirtualProgram* vp = VirtualProgram::getOrCreate(newFontStateSet);
vp->setName("osgEarth::Text");
osgEarth::Shaders coreShaders;
coreShaders.load(vp, coreShaders.TextLegacy);
#if defined(OSG_GL3_AVAILABLE) && !defined(OSG_GL2_AVAILABLE) && !defined(OSG_GL1_AVAILABLE)
newFontStateSet->setDefine("OSGTEXT_GLYPH_ALPHA_FORMAT_IS_RED");
#endif
Lighting::set(newFontStateSet, osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED);
OE_INFO << LC << "Installed VPs on a font" << std::endl;
}
setStateSet( newFontStateSet );
}
osgText::TextBase::setFont(font);
#endif
}
示例15: Depth
// Generates the main shader code for rendering the terrain.
void
RexTerrainEngineNode::updateState()
{
if ( _batchUpdateInProgress )
{
_stateUpdateRequired = true;
}
else
{
osg::StateSet* terrainStateSet = _terrain->getOrCreateStateSet(); // everything
osg::StateSet* surfaceStateSet = getSurfaceStateSet(); // just the surface
// required for multipass tile rendering to work
surfaceStateSet->setAttributeAndModes(
new osg::Depth(osg::Depth::LEQUAL, 0, 1, true) );
// activate standard mix blending.
terrainStateSet->setAttributeAndModes(
new osg::BlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA),
osg::StateAttribute::ON );
// install patch param if we are tessellation on the GPU.
if ( _terrainOptions.gpuTessellation() == true )
{
#ifdef HAVE_PATCH_PARAMETER
terrainStateSet->setAttributeAndModes( new osg::PatchParameter(3) );
#endif
}
// install shaders, if we're using them.
if ( Registry::capabilities().supportsGLSL() )
{
Shaders package;
VirtualProgram* terrainVP = VirtualProgram::getOrCreate(terrainStateSet);
terrainVP->setName( "Rex Terrain" );
package.load(terrainVP, package.ENGINE_VERT_MODEL);
//moved to CTOR so it's always available
//package.load(terrainVP, package.SDK);
bool useTerrainColor = _terrainOptions.color().isSet();
package.define("OE_REX_USE_TERRAIN_COLOR", useTerrainColor);
if ( useTerrainColor )
{
surfaceStateSet->addUniform(new osg::Uniform("oe_terrain_color", _terrainOptions.color().get()));
}
bool useBlending = _terrainOptions.enableBlending().get();
package.define("OE_REX_GL_BLENDING", useBlending);
bool morphImagery = _terrainOptions.morphImagery().get();
package.define("OE_REX_MORPH_IMAGERY", morphImagery);
// Funtions that affect only the terrain surface:
VirtualProgram* surfaceVP = VirtualProgram::getOrCreate(surfaceStateSet);
surfaceVP->setName("Rex Surface");
// Functions that affect the terrain surface only:
package.load(surfaceVP, package.ENGINE_VERT_VIEW);
package.load(surfaceVP, package.ENGINE_FRAG);
// Normal mapping shaders:
if ( this->normalTexturesRequired() )
{
package.load(surfaceVP, package.NORMAL_MAP_VERT);
package.load(surfaceVP, package.NORMAL_MAP_FRAG);
}
// Morphing?
if (_terrainOptions.morphTerrain() == true ||
_terrainOptions.morphImagery() == true)
{
package.define("OE_REX_VERTEX_MORPHING", (_terrainOptions.morphTerrain() == true));
package.load(surfaceVP, package.MORPHING_VERT);
}
for(LandCoverZones::iterator zone = _landCoverData._zones.begin(); zone != _landCoverData._zones.end(); ++zone)
{
for(LandCoverBins::iterator bin = zone->_bins.begin(); bin != zone->_bins.end(); ++bin)
{
osg::StateSet* landCoverStateSet = bin->_binProto->getStateSet();
// enable alpha-to-coverage multisampling for vegetation.
landCoverStateSet->setMode(GL_SAMPLE_ALPHA_TO_COVERAGE_ARB, 1);
// uniform that communicates the availability of multisampling.
landCoverStateSet->addUniform( new osg::Uniform(
"oe_terrain_hasMultiSamples",
osg::DisplaySettings::instance()->getMultiSamples()) );
landCoverStateSet->setAttributeAndModes(
new osg::BlendFunc(GL_ONE, GL_ZERO, GL_ONE, GL_ZERO),
osg::StateAttribute::OVERRIDE );
#ifdef HAVE_OSG_PATCH_PARAMETER
landCoverStateSet->setAttributeAndModes( new osg::PatchParameter(3) );
#endif
}
//.........这里部分代码省略.........