• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ osg::RenderInfo类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中osg::RenderInfo的典型用法代码示例。如果您正苦于以下问题:C++ RenderInfo类的具体用法?C++ RenderInfo怎么用?C++ RenderInfo使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



在下文中一共展示了RenderInfo类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1:

void
CloudsDrawable::drawImplementation(osg::RenderInfo& renderInfo) const
{
    renderInfo.getState()->disableAllVertexArrays();
    _SL->getAtmosphere()->DrawObjects( true, true, true );
    renderInfo.getState()->dirtyAllVertexArrays();
}
开发者ID:RealRui,项目名称:osgearth,代码行数:7,代码来源:SilverLiningCloudsDrawable.cpp


示例2:

void SilverLiningNode::SkyDrawable::drawImplementation( osg::RenderInfo& renderInfo ) const
{
    renderInfo.getState()->disableAllVertexArrays();
    _silverLining->initializeSilverLining( renderInfo );
    _silverLining->atmosphere()->DrawSky( true, false, 0.0, true, false );
    renderInfo.getState()->dirtyAllVertexArrays();
}
开发者ID:512400330,项目名称:osgRecipes,代码行数:7,代码来源:SilverLiningNode.cpp


示例3: operator

    virtual void operator () (osg::RenderInfo& renderInfo) const
    {
        if (!_frameCapture)
        {
            OSG_NOTICE<<"No FrameCamera assigned"<<std::endl;
            return;
        }

        unsigned int frameNumber = renderInfo.getState()->getFrameStamp()->getFrameNumber();
        
        CameraNumMap::const_iterator itr = _cameraNumMap.find(renderInfo.getCurrentCamera());
        std::string outputFileName = (itr!=_cameraNumMap.end()) ?
                                     _frameCapture->getOutputFileName(itr->second, frameNumber) :
                                     _frameCapture->getOutputFileName(frameNumber);
                                     
        OSG_NOTICE<<"outputFileName="<<outputFileName<<std::endl;

        osg::Camera* camera = renderInfo.getCurrentCamera();
        osg::Viewport* viewport = camera ? camera->getViewport() : 0;
        if (viewport)
        {
            OSG_NOTICE<<"Doing read of ="<<viewport->x()<<", "<<viewport->y()<<", "<<viewport->width()<<", "<<viewport->height()<<" with pixelFormat=0x"<<std::hex<<_pixelFormat<<std::dec<<std::endl;

            glReadBuffer(camera->getDrawBuffer());
            osg::ref_ptr<osg::Image> image = new osg::Image;
            
            image->readPixels(viewport->x(),viewport->y(),viewport->width(),viewport->height(),
                              _pixelFormat, GL_UNSIGNED_BYTE, 1);

            if (_flip) image->flipVertical();

            osgDB::writeImageFile(*image, outputFileName);
        }
        
    }
开发者ID:151706061,项目名称:OpenSceneGraph,代码行数:35,代码来源:osgframerenderer.cpp


示例4: drawImplementation

void SomePointsGenerator::drawImplementation( osg::RenderInfo& renderInfo ) const
{

    //get output buffer
    unsigned int contextID = renderInfo.getState()->getContextID();

    GLuint ubuff= genbuffer->getOrCreateGLBufferObject(contextID)->getGLObjectID();

    osg::GLExtensions* ext = renderInfo.getState()->get<osg::GLExtensions>();

    ext->glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0,ubuff);

    glEnable(GL_RASTERIZER_DISCARD);

    ext->glBeginTransformFeedback(GL_POINTS);


    osg::Geometry::drawImplementation(  renderInfo );


    ext->glEndTransformFeedback();

    glDisable(GL_RASTERIZER_DISCARD);

    ext->glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 0);
}
开发者ID:yueying,项目名称:osg,代码行数:26,代码来源:osgtransformfeedback.cpp


示例5: drawImplementation

void dustDrawable::drawImplementation(osg::RenderInfo &renderInfo) const
{
    if (renderer != NULL)
    {

        osg::ref_ptr<osg::StateSet> currentState = new osg::StateSet;
        renderInfo.getState()->captureCurrentState(*currentState);
        renderInfo.getState()->pushStateSet(currentState.get());

        // Save the current state
        glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS);
        glPushAttrib(GL_ALL_ATTRIB_BITS);
        /* enum DisplayMode
		{
		PARTICLE_POINTS,
		PARTICLE_SPRITES,
		PARTICLE_SPRITES_COLOR,
		PARTICLE_NUM_MODES
		*/
        if (starDust::instance()->tuiRender->getState())
        {
            renderer->setSpriteSize(starDust::instance()->particleSize);
            renderer->display(ParticleRenderer::PARTICLE_SPRITES, cudaParticles->getNumActiveParticles());
            //renderer->display(ParticleRenderer::PARTICLE_POINTS);
        }

        // Restore the current state
        glPopAttrib();
        glPopClientAttrib();
        renderInfo.getState()->popStateSet();
    }
}
开发者ID:xyuan,项目名称:covise,代码行数:32,代码来源:starDust.cpp


示例6: drawImplementation

 virtual void drawImplementation( osg::RenderInfo& renderInfo ) const
 {
     unsigned int contextID = renderInfo.getContextID();
     if ( !_initialized )
     {
         NanoVGDrawable* constMe = const_cast<NanoVGDrawable*>(this);
         glewInit();
         constMe->_vg = nvgCreateGL2( NVG_ANTIALIAS|NVG_STENCIL_STROKES|NVG_DEBUG );
         if ( !constMe->_vg )
         {
             OSG_NOTICE << "[NanoVGDrawable] Failed to create VG context" << std::endl;
             return;
         }
         
         constMe->initializeGL( renderInfo.getState() );
         constMe->_activeContextID = contextID;
         constMe->_initialized = true;
     }
     else if ( _vg && contextID==_activeContextID )
     {
         osg::State* state = renderInfo.getState();
         state->disableAllVertexArrays();
         state->disableTexCoordPointer( 0 );
         
         nvgBeginFrame( _vg, _width, _height, 1.0f );
         updateGL( state );
         nvgEndFrame( _vg );
     }
 }
开发者ID:AlessandroZanella,项目名称:osgRecipes,代码行数:29,代码来源:osgnanovg.cpp


示例7:

void
LayerDrawable::drawImplementation(osg::RenderInfo& ri) const
{    
    DrawState& ds = *_drawState;

    // Make sure the draw state is up to date:
    ds.refresh(ri);

    if (ds._layerOrderUL >= 0)
    {
        ds._ext->glUniform1i(ds._layerOrderUL, (GLint)_order);
    }

    if (_layer)
    {
        if (ds._layerUidUL >= 0)
            ds._ext->glUniform1i(ds._layerUidUL,      (GLint)_layer->getUID());
        if (ds._layerOpacityUL >= 0 && _imageLayer)
            ds._ext->glUniform1f(ds._layerOpacityUL,  (GLfloat)_imageLayer->getOpacity());
        if (ds._layerMinRangeUL >= 0 && _imageLayer)
            ds._ext->glUniform1f(ds._layerMinRangeUL, (GLfloat)_imageLayer->getMinVisibleRange());
        if (ds._layerMaxRangeUL >= 0 && _imageLayer)
            ds._ext->glUniform1f(ds._layerMaxRangeUL, (GLfloat)_imageLayer->getMaxVisibleRange());
    }
    else
    {
        if (ds._layerUidUL >= 0)
            ds._ext->glUniform1i(ds._layerUidUL,      (GLint)-1);
        if (ds._layerOpacityUL >= 0)
            ds._ext->glUniform1f(ds._layerOpacityUL,  (GLfloat)1.0f);
        if (ds._layerMinRangeUL >= 0)
            ds._ext->glUniform1f(ds._layerMinRangeUL, (GLfloat)0.0f);
        if (ds._layerMaxRangeUL >= 0)
            ds._ext->glUniform1f(ds._layerMaxRangeUL, (GLfloat)FLT_MAX);
    }

    for (DrawTileCommands::const_iterator tile = _tiles.begin(); tile != _tiles.end(); ++tile)
    {
        tile->draw(ri, ds, 0L);
    }

    // If set, dirty all OSG state to prevent any leakage - this is sometimes
    // necessary when doing custom OpenGL within a Drawable.
    if (_clearOsgState)
    {
        ri.getState()->dirtyAllAttributes();
        ri.getState()->dirtyAllModes();
        ri.getState()->dirtyAllVertexArrays();
        
        // unbind local buffers when finished.
        ds._ext->glBindBuffer(GL_ARRAY_BUFFER_ARB,0);
        ds._ext->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB,0);

        // gw: no need to do this, in fact it will cause positional attributes
        // (light clip planes and lights) to immediately be reapplied under the
        // current MVM, which will by definition be wrong!)
        //ri.getState()->apply();
    }
}
开发者ID:njuliujl,项目名称:osgearth,代码行数:59,代码来源:LayerDrawable.cpp


示例8: operator

        virtual void operator () (osg::RenderInfo& renderInfo) const
        {
            mTexture->copyTexImage2D(*renderInfo.getState(), 0, 0, mWidth, mHeight);

            // Callback removes itself when done
            if (renderInfo.getCurrentCamera())
                renderInfo.getCurrentCamera()->setInitialDrawCallback(NULL);
        }
开发者ID:ChairGraveyard,项目名称:TES3MP,代码行数:8,代码来源:loadingscreen.cpp


示例9: drawImplementation

void Skybox::drawImplementation(osg::RenderInfo& renderInfo) const{
	int positionCote=mSize/2;

	Vec3Array* boxVertices = new osg::Vec3Array;
	boxVertices->push_back(Vec3f(-positionCote,-positionCote,-positionCote)); //back bottom left 0
	boxVertices->push_back(Vec3f(positionCote,-positionCote,-positionCote)); //back bottom right 1
	boxVertices->push_back(Vec3f(positionCote,positionCote,-positionCote)); //back up right 2
	boxVertices->push_back(Vec3f(-positionCote,positionCote,-positionCote)); //back up left 3
	boxVertices->push_back(Vec3f(-positionCote,-positionCote,positionCote)); //front bottom left 4
	boxVertices->push_back(Vec3f(positionCote,-positionCote,positionCote)); //front bottom right 5
	boxVertices->push_back(Vec3f(positionCote,positionCote,positionCote)); //front up right 6
	boxVertices->push_back(Vec3f(-positionCote,positionCote,positionCote)); //front up left 7

	osg::ref_ptr<osg::Texture2D> texture (new osg::Texture2D(image.get()));
	osg::ref_ptr<osg::StateSet> texSS (new osg::StateSet);
	texture->setInternalFormat(GL_RGBA);
	texture->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR);
	texture->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR);
	texSS->setTextureAttributeAndModes (0, texture.get(), osg::StateAttribute::ON);
	texSS->setMode(GL_LIGHTING,osg::StateAttribute::OFF);

	renderInfo.getState()->apply(texSS.get());
	boxVertices->at(0)._v;
	glBegin(GL_QUADS);
		glTexCoord2f(1.0/4.0, 1.01/3.0);glVertex3fv(boxVertices->at(0)._v);
		glTexCoord2f(2.0/4.0, 1.01/3.0);glVertex3fv(boxVertices->at(1)._v);
		glTexCoord2f(2.0/4.0, 1.99/3.0);glVertex3fv(boxVertices->at(2)._v);
		glTexCoord2f(1.0/4.0, 1.99/3.0);glVertex3fv(boxVertices->at(3)._v);

		glTexCoord2f(1.0/4.0, 1.01/3.0);glVertex3fv(boxVertices->at(0)._v);
		glTexCoord2f(0, 1.01/3.0);glVertex3fv(boxVertices->at(4)._v);
		glTexCoord2f(0, 1.99/3.0);glVertex3fv(boxVertices->at(7)._v);
		glTexCoord2f(1.0/4.0, 1.99/3.0);glVertex3fv(boxVertices->at(3)._v);

		glTexCoord2f(1, 1.01/3.0);glVertex3fv(boxVertices->at(4)._v);
		glTexCoord2f(3.0/4.0, 1.01/3.0);glVertex3fv(boxVertices->at(5)._v);
		glTexCoord2f(3.0/4.0, 1.99/3.0);glVertex3fv(boxVertices->at(6)._v);
		glTexCoord2f(1, 1.99/3.0);glVertex3fv(boxVertices->at(7)._v);

		glTexCoord2f(2.0/4.0, 1.01/3.0);glVertex3fv(boxVertices->at(1)._v);
		glTexCoord2f(3.0/4.0, 1.01/3.0);glVertex3fv(boxVertices->at(5)._v);
		glTexCoord2f(3.0/4.0, 1.99/3.0);glVertex3fv(boxVertices->at(6)._v);
		glTexCoord2f(2.0/4.0, 1.99/3.0);glVertex3fv(boxVertices->at(2)._v);

		glTexCoord2f(1.01/4.0, 0);glVertex3fv(boxVertices->at(0)._v);
		glTexCoord2f(1.99/4.0, 0);glVertex3fv(boxVertices->at(1)._v);
		glTexCoord2f(1.99/4.0, 1.0/3.0);glVertex3fv(boxVertices->at(5)._v);
		glTexCoord2f(1.01/4.0, 1.0/3.0);glVertex3fv(boxVertices->at(4)._v);

		glTexCoord2f(1.99/4.0, 2.0/3.0);glVertex3fv(boxVertices->at(2)._v);
		glTexCoord2f(1.01/4.0, 2.0/3.0);glVertex3fv(boxVertices->at(3)._v);
		glTexCoord2f(1.01/4.0, 1);glVertex3fv(boxVertices->at(7)._v);
		glTexCoord2f(1.99/4.0, 1);glVertex3fv(boxVertices->at(6)._v);
	glEnd();

	renderInfo.getState()->apply();
}
开发者ID:mapster76,项目名称:FlyThroughACity,代码行数:57,代码来源:Skybox.cpp


示例10: operator

        virtual void operator () (osg::RenderInfo& renderInfo) const
        {
            int w = renderInfo.getCurrentCamera()->getViewport()->width();
            int h = renderInfo.getCurrentCamera()->getViewport()->height();
            mTexture->copyTexImage2D(*renderInfo.getState(), 0, 0, w, h);

            // Callback removes itself when done
            if (renderInfo.getCurrentCamera())
                renderInfo.getCurrentCamera()->setInitialDrawCallback(NULL);
        }
开发者ID:EmperorArthur,项目名称:openmw,代码行数:10,代码来源:loadingscreen.cpp


示例11: operator

void Camera::DrawCallback::operator () (osg::RenderInfo& renderInfo) const
{
    if (renderInfo.getCurrentCamera())
    {
        operator()(*(renderInfo.getCurrentCamera()));
    }
    else
    {
        OSG_WARN<<"Error: Camera::DrawCallback called without valid camera."<<std::endl;
    }
}
开发者ID:aitormoreno,项目名称:OpenSceneGraph,代码行数:11,代码来源:Camera.cpp


示例12:

void ossimPlanetViewer::DrawCallback::operator () (osg::RenderInfo& renderInfo) const
{
   if(!theViewer) return;
   if(theViewer->terrainLayer()&&renderInfo.getState())
   {
      //double delta = osg::Timer::instance()->delta_s(theViewer->theFrameStartTimeStamp, 
      //                                               osg::Timer::instance()->tick());
      theViewer->terrainLayer()->compileGLObjects(*renderInfo.getState(), 
                                                  theViewer->terrainLayer()->minimumTimeToCompilePerFrame());
   }
}
开发者ID:star-labs,项目名称:star_ossim,代码行数:11,代码来源:ossimPlanetViewer.cpp


示例13: draw

void RenderBin::draw(osg::RenderInfo& renderInfo,RenderLeaf*& previous)
{
    renderInfo.pushRenderBin(this);

    if (_drawCallback.valid())
    {
        _drawCallback->drawImplementation(this,renderInfo,previous);
    }
    else drawImplementation(renderInfo,previous);

    renderInfo.popRenderBin();
}
开发者ID:3dcl,项目名称:osg,代码行数:12,代码来源:RenderBin.cpp


示例14: drawImplementation

    void drawImplementation(osg::RenderInfo& renderInfo, const osg::Drawable* drawable) const
    {
        unsigned contextID = renderInfo.getState()->getContextID();
        osg::GLBufferObject* bo = _vbo->getOrCreateGLBufferObject(contextID);
        if ( bo->isDirty() )
            bo->compileBuffer();

        GLuint objID = bo->getGLObjectID();

        osg::GLExtensions* ext = renderInfo.getState()->get<osg::GLExtensions>();
           
        GLuint numPrims = 0;
        GLuint& query = _queries[contextID];
        if ( query == INT_MAX )
        {
            ext->glGenQueries(1, &query);
        }
        else
        {     
        
            ext->glGetQueryObjectuiv(query, GL_QUERY_RESULT, &numPrims);        
            s_numInstancesToDraw = numPrims;
        }


        ext->glBindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, objID, _offset, _size);
        //if ( renderInfo.getState()->checkGLErrors("PRE:glBindBufferBase") ) exit(0);

        glEnable(GL_RASTERIZER_DISCARD);
        //if ( renderInfo.getState()->checkGLErrors("PRE:glEnable(GL_RASTERIZER_DISCARD)") ) exit(0);


        ext->glBeginQuery(TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, query);

        ext->glBeginTransformFeedback(GL_POINTS); // get from input geom?
        //if ( renderInfo.getState()->checkGLErrors("PRE:glBeginTransformFeedback(GL_POINTS)") ) exit(0);
        

        drawable->drawImplementation(renderInfo);

        
        ext->glEndTransformFeedback();
        //if ( renderInfo.getState()->checkGLErrors("POST:glEndTransformFeedback") ) exit(0);
        ext->glEndQuery(TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);

        glDisable(GL_RASTERIZER_DISCARD);
        //if ( renderInfo.getState()->checkGLErrors("POST:glDisable(GL_RASTERIZER_DISCARD)") ) exit(0);

        ext->glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 0);
        //if ( renderInfo.getState()->checkGLErrors("POST:glBindBufferBase") ) exit(0);

    }
开发者ID:2php,项目名称:osgearth,代码行数:52,代码来源:osgearth_xfbtest.cpp


示例15: newThread

void
ScreenCapture::operator()( osg::RenderInfo& ri ) const
{
    if( captureOn_ )
    {
        bool newThread( false );
        if( wit_ == NULL )
        {
            wit_ = new WriteImageThread();
            newThread = true;
        }
        osg::Image* image = new osg::Image;
        image->setFileName( 
            getFileName( useFrameNum_ ? ri.getState()->getFrameStamp() : NULL ) );

        osg::notify( osg::INFO ) << "ScreenCapture: Reading image for file " << image->getFileName() << " ... " << std::endl;
        const osg::Viewport* vp( ( vp_ == NULL ) ?
            ri.getState()->getCurrentViewport() : vp_.get() );
        image->readPixels( vp->x(), vp->y(), vp->width(), vp->height(), GL_RGBA, GL_UNSIGNED_BYTE );
        {
            OpenThreads::ScopedLock< OpenThreads::Mutex > lock( wit_->lock_ );
            wit_->imageList_.push_back( image );
        }

        if( numFrames_ > 0 )
        {
            if( --numFrames_ == 0 )
                captureOn_ = false;
        }

        if( newThread )
            wit_->start();
    }
    else
    {
        if( ( wit_ != NULL ) )
        {
            osg::notify( osg::INFO ) << "ScreenCapture: Thread cleanup" << std::endl;
            if( wit_->isRunning() )
            {
                wit_->cancel();
                wit_->join();
            }
            if( wit_->isRunning() )
                osg::notify( osg::ALWAYS ) << "Thread is running after join() call." << std::endl;
            delete wit_;
            wit_ = NULL;
        }
    }
}
开发者ID:AdriCS,项目名称:osgWorks-mirror,代码行数:50,代码来源:ScreenCapture.cpp


示例16:

void
LayerDrawable::drawImplementation(osg::RenderInfo& ri) const
{
    //OE_INFO << LC << (_layer ? _layer->getName() : "[empty]") << " tiles=" << _tiles.size() << std::endl;

    // Get this context's state values:
    PerContextDrawState& ds = _drawState->getPCDS(ri.getContextID());

    ds.refresh(ri, _drawState->_bindings);

    if (ds._layerUidUL >= 0)
    {
        GLint uid = _layer ? (GLint)_layer->getUID() : (GLint)-1;
        ds._ext->glUniform1i(ds._layerUidUL, uid);
    }
    else
    {
        // This just means that the fragment shader for this layer doesn't use oe_layer_uid
    }

    for (DrawTileCommands::const_iterator tile = _tiles.begin(); tile != _tiles.end(); ++tile)
    {
        tile->draw(ri, *_drawState, 0L);
    }

    // If set, dirty all OSG state to prevent any leakage - this is sometimes
    // necessary when doing custom OpenGL within a Drawable.
    if (_clearOsgState)
    {
        // Dirty the texture attributes so OSG can properly reset them
        // NOTE: cannot call state.dirtyAllAttributes, because that would invalidate
        // positional state like light sources!
        reinterpret_cast<StateEx*>(ri.getState())->dirtyAllTextureAttributes();

        // NOTE: this is a NOOP in OSG 3.5.x, but not in 3.4.x ... Later we will need to
        // revisit whether to call disableAllVertexArrays() in 3.5.x instead.
        ri.getState()->dirtyAllVertexArrays();
        
        // unbind local buffers when finished.
        ds._ext->glBindBuffer(GL_ARRAY_BUFFER_ARB,0);
        ds._ext->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB,0);

        // gw: no need to do this, in fact it will cause positional attributes
        // (light clip planes and lights) to immediately be reapplied under the
        // current MVM, which will by definition be wrong!)
        //ri.getState()->apply();
    }
}
开发者ID:aroth-fastprotect,项目名称:osgearth,代码行数:48,代码来源:LayerDrawable.cpp


示例17: drawImplementation

    /**
     * Draws a bin. Most of this code is copied from osgUtil::RenderBin::drawImplementation.
     * The modifications are (a) skipping code to render child bins, (b) setting a bin-global
     * projection matrix in orthographic space, and (c) calling our custom "renderLeaf()" method 
     * instead of RenderLeaf::render()
     */
    void drawImplementation( osgUtil::RenderBin* bin, osg::RenderInfo& renderInfo, osgUtil::RenderLeaf*& previous )
    {
        osg::State& state = *renderInfo.getState();

        unsigned int numToPop = (previous ? osgUtil::StateGraph::numToPop(previous->_parent) : 0);
        if (numToPop>1) --numToPop;
        unsigned int insertStateSetPosition = state.getStateSetStackSize() - numToPop;

        if (bin->getStateSet())
        {
            state.insertStateSet(insertStateSetPosition, bin->getStateSet());
        }

        // apply a window-space projection matrix.
        const osg::Viewport* vp = renderInfo.getCurrentCamera()->getViewport();
        if ( vp )
        {
            //TODO see which is faster

            osg::ref_ptr<osg::RefMatrix>& m = _ortho2D.get();
            if ( !m.valid() )
                m = new osg::RefMatrix();

            m->makeOrtho2D( vp->x(), vp->x()+vp->width()-1, vp->y(), vp->y()+vp->height()-1 );
            state.applyProjectionMatrix( m.get() );

            //osg::ref_ptr<osg::RefMatrix> rm = new osg::RefMatrix( osg::Matrix::ortho2D(
            //    vp->x(), vp->x()+vp->width()-1,
            //    vp->y(), vp->y()+vp->height()-1 ) );
            //state.applyProjectionMatrix( rm.get() );
        }

        // render the list
        osgUtil::RenderBin::RenderLeafList& leaves = bin->getRenderLeafList();
        for(osgUtil::RenderBin::RenderLeafList::reverse_iterator rlitr = leaves.rbegin();
            rlitr!= leaves.rend();
            ++rlitr)
        {
            osgUtil::RenderLeaf* rl = *rlitr;
            renderLeaf( rl, renderInfo, previous );
            previous = rl;
        }

        if ( bin->getStateSet() )
        {
            state.removeStateSet(insertStateSetPosition);
        }
    }
开发者ID:airwzz999,项目名称:osgearth-for-android,代码行数:54,代码来源:Decluttering.cpp


示例18:

void
PointDrawable::drawImplementation(osg::RenderInfo& ri) const
{
    // The mode validity for PointSprite might never get set since
    // the OSG GLObjectVisitor cannot traverse the shared stateset;
    // so this block of code will set it upon first draw.
    static bool s_sharedStateActivated = false;
    static Threading::Mutex s_mutex;

    if (!s_sharedStateActivated)
    {
        s_mutex.lock();
        if (!s_sharedStateActivated)
        {                
            osg::PointSprite* sprite = dynamic_cast<osg::PointSprite*>(
                _sharedStateSet->getTextureAttribute(0, osg::StateAttribute::POINTSPRITE));

            if (sprite)
                sprite->checkValidityOfAssociatedModes(*ri.getState());

            s_sharedStateActivated = true;
        }

        s_mutex.unlock();
    }

    osg::Geometry::drawImplementation(ri);
}
开发者ID:JD31,项目名称:osgearth,代码行数:28,代码来源:PointDrawable.cpp


示例19: operator

void WindowCaptureCallback::operator () (osg::RenderInfo& renderInfo) const {

  osg::GraphicsContext* gc = renderInfo.getState()->getGraphicsContext();
  if (_gc==NULL) {
    _gc=gc;
  }

  freemovr_assert(_gc==gc); // only a single GraphicsContext supported

  OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex);

  if (_fileName.empty()) return; // no point in capturing image if it's not used

  glReadBuffer(GL_BACK);
  const osg::GraphicsContext::Traits* traits = gc->getTraits();
  if (traits!=NULL) {
    GLenum pixelFormat;

    pixelFormat = GL_RGBA; // force saving alpha

    int width = traits->width;
    int height = traits->height;

    //std::cout<<"Capture: size="<<width<<"x"<<height<<", format="<<(pixelFormat == GL_RGBA ? "GL_RGBA":"GL_RGB")<<std::endl;

    _image->readPixels(0, 0, width, height, pixelFormat, GL_UNSIGNED_BYTE);

    //std::cout << "Writing to: " << _fileName << std::endl;
    osgDB::writeImageFile(*_image, _fileName);
    _fileName = "";
  }
}
开发者ID:FreemooVR,项目名称:FreemooVR,代码行数:32,代码来源:WindowCaptureCallback.cpp


示例20: drawImplementation

    virtual void drawImplementation(osg::RenderInfo& renderInfo,const osg::Drawable* drawable) const
    {
        osg::State& state = *renderInfo.getState();

        if (!_firstTime)
        {
            _previousModelViewMatrix = _currentModelViewMatrix;
            _currentModelViewMatrix = state.getModelViewMatrix();
            _inverseModelViewMatrix.invert(_currentModelViewMatrix);

            osg::Matrix T(_previousModelViewMatrix*_inverseModelViewMatrix);

            osg::Geometry* geometry = dynamic_cast<osg::Geometry*>(const_cast<osg::Drawable*>(drawable));
            osg::Vec3Array* vertices = dynamic_cast<osg::Vec3Array*>(geometry->getVertexArray());
            for(unsigned int i=0;i+1<vertices->size();i+=2)
            {
                (*vertices)[i+1] = (*vertices)[i]*T;
            }
        }
        else
        {
            _currentModelViewMatrix = state.getModelViewMatrix();
        }

        _firstTime = false;

        drawable->drawImplementation(renderInfo);
    }
开发者ID:yueying,项目名称:osg,代码行数:28,代码来源:osgspacewarp.cpp



注:本文中的osg::RenderInfo类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ osg::SimpleSceneManagerRefPtr类代码示例发布时间:2022-05-31
下一篇:
C++ osg::Quat类代码示例发布时间:2022-05-31
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap