Example #1
0
void ProjectCubemapToGeometryPass::replace_display_surface_geometry( DisplaySurfaceGeometry* geometry_parameters ) {
    freemoovr_assert( geometry_parameters!=NULL );

    // Tear down usage of previous display surface geometry.
    if (_state_set.valid()) {
        if (_observerPositionUniform != NULL) {
            _state_set->removeUniform(_observerPositionUniform);
        }
    }

    if (_private_geometry.valid()) {
        _camera->removeChild( _private_geometry.get() );
    }

    if (_inner_geode.valid()) {
        _public_geometry->removeChild(_inner_geode.get());
    }

    // Use new display surface geometry.
    _geometry_parameters = geometry_parameters;

    _private_geometry = create_textured_geometry();
    _camera->addChild( _private_geometry.get() );

    _state_set = _private_geometry->getOrCreateStateSet();
    _state_set->addUniform(_observerPositionUniform);
    _program = set_shader( _state_set,
                           "ProjectCubemapToGeometryPass.vert",
                           "ProjectCubemapToGeometryPass.frag");

    _inner_geode = _create_textured_geometry_inner_geode();
    _public_geometry->addChild(_inner_geode.get());

}
ProjectCubemapToGeometryPass::ProjectCubemapToGeometryPass(std::string flyvr_basepath,
                               osg::TextureCubeMap* texture,
                               osg::Uniform::Callback* observer_position_cb,
                               DisplaySurfaceGeometry* geometry_parameters,
                               unsigned int tex_width,
                               unsigned int tex_height) :
  _geometry_parameters( geometry_parameters), _tex_width(tex_width), _tex_height(tex_height), _observer_position_callback(observer_position_cb)
 {
   flyvr_assert( texture!=NULL );
   flyvr_assert( geometry_parameters!=NULL );

   set_flyvr_base_path(flyvr_basepath);
   set_plugin_path(flyvr_basepath,false);

  _top = new osg::Group;
  _top->addDescription("ProjectCubemapToGeometryPass top node");
  _in_texture_cubemap = texture;

  create_output_texture();

  _camera = new osg::Camera;
  setup_camera();
  _geometry = create_textured_geometry();
  _camera->addChild( _geometry.get() );
  _top->addChild( _camera );

  set_shader( "ProjectCubemapToGeometryPass.vert",
              "ProjectCubemapToGeometryPass.frag");
}
Example #3
0
ProjectCubemapToGeometryPass::ProjectCubemapToGeometryPass(std::string freemoovr_basepath,
        osg::TextureCubeMap* texture,
        osg::Uniform::Callback* observer_position_cb,
        DisplaySurfaceGeometry* geometry_parameters,
        unsigned int tex_width,
        unsigned int tex_height) :
    _geometry_parameters( geometry_parameters), _tex_width(tex_width), _tex_height(tex_height), _observer_position_callback(observer_position_cb)
{
    freemoovr_assert( texture!=NULL );
    freemoovr_assert( geometry_parameters!=NULL );

    set_freemoovr_base_path(freemoovr_basepath);

    _top = new osg::Group;
    _top->addDescription("ProjectCubemapToGeometryPass top node");
    _in_texture_cubemap = texture;

    _observerPositionUniform = new osg::Uniform( "ObserverPosition",
            osg::Vec3(0.22f, 0.22f, 0.9f) );
    if (_observer_position_callback!=NULL) {
        _observerPositionUniform->setUpdateCallback(_observer_position_callback);
    }

    create_output_texture();

    _camera = new osg::Camera;
    setup_camera();
    _private_geometry = create_textured_geometry();
    _camera->addChild( _private_geometry.get() );
    _top->addChild( _camera );

    _state_set = _private_geometry->getOrCreateStateSet();
    _state_set->addUniform(_observerPositionUniform);

    _program = set_shader( _state_set,
                           "ProjectCubemapToGeometryPass.vert",
                           "ProjectCubemapToGeometryPass.frag");

    _public_geometry = new osg::Group;
    _public_geometry->addDescription("ProjectCubemapToGeometryPass output textured geometry top node");

    _inner_geode = _create_textured_geometry_inner_geode();
    _public_geometry->addChild(_inner_geode.get());
}