Fix compilation with OSG 3.2
This commit is contained in:
parent
c316bd4af8
commit
e74ebabc36
2 changed files with 55 additions and 22 deletions
|
@ -34,6 +34,7 @@
|
||||||
#include <osg/Switch>
|
#include <osg/Switch>
|
||||||
#include <osg/Texture2D>
|
#include <osg/Texture2D>
|
||||||
#include <osg/TextureRectangle>
|
#include <osg/TextureRectangle>
|
||||||
|
#include <osg/Version>
|
||||||
|
|
||||||
#include <osgText/Text>
|
#include <osgText/Text>
|
||||||
#include <osgDB/ReadFile>
|
#include <osgDB/ReadFile>
|
||||||
|
@ -91,32 +92,16 @@ void SplashScreen::createNodes()
|
||||||
splashTexture->setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR);
|
splashTexture->setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR);
|
||||||
splashTexture->setImage(_splashImage);
|
splashTexture->setImage(_splashImage);
|
||||||
|
|
||||||
_splashFBOCamera = new osg::Camera;
|
|
||||||
_splashFBOCamera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
|
|
||||||
_splashFBOCamera->setViewMatrix(osg::Matrix::identity());
|
|
||||||
_splashFBOCamera->setClearMask( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
|
||||||
_splashFBOCamera->setClearColor( osg::Vec4( 0., 0., 0., 0. ) );
|
|
||||||
_splashFBOCamera->setAllowEventFocus(false);
|
|
||||||
_splashFBOCamera->setCullingActive(false);
|
|
||||||
|
|
||||||
_splashFBOTexture = new osg::Texture2D;
|
_splashFBOTexture = new osg::Texture2D;
|
||||||
_splashFBOTexture->setInternalFormat(GL_RGB);
|
_splashFBOTexture->setInternalFormat(GL_RGB);
|
||||||
_splashFBOTexture->setResizeNonPowerOfTwoHint(false);
|
_splashFBOTexture->setResizeNonPowerOfTwoHint(false);
|
||||||
_splashFBOTexture->setFilter(osg::Texture::MIN_FILTER, osg::Texture::LINEAR);
|
_splashFBOTexture->setFilter(osg::Texture::MIN_FILTER, osg::Texture::LINEAR);
|
||||||
_splashFBOTexture->setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR);
|
_splashFBOTexture->setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR);
|
||||||
_splashFBOCamera->setRenderTargetImplementation( osg::Camera::FRAME_BUFFER_OBJECT );
|
|
||||||
_splashFBOCamera->setRenderOrder(osg::Camera::PRE_RENDER);
|
|
||||||
_splashFBOCamera->attach(osg::Camera::COLOR_BUFFER, _splashFBOTexture);
|
|
||||||
|
|
||||||
|
_splashFBOCamera = createFBOCamera();
|
||||||
addChild(_splashFBOCamera);
|
addChild(_splashFBOCamera);
|
||||||
|
|
||||||
osg::StateSet* stateSet = _splashFBOCamera->getOrCreateStateSet();
|
|
||||||
stateSet->setMode(GL_ALPHA_TEST, osg::StateAttribute::OFF);
|
|
||||||
stateSet->setMode(GL_CULL_FACE, osg::StateAttribute::OFF);
|
|
||||||
stateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);
|
|
||||||
stateSet->setAttribute(new osg::Depth(osg::Depth::ALWAYS, 0, 1, false));
|
|
||||||
stateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
|
||||||
|
|
||||||
osg::Geometry* geometry = new osg::Geometry;
|
osg::Geometry* geometry = new osg::Geometry;
|
||||||
geometry->setSupportsDisplayList(false);
|
geometry->setSupportsDisplayList(false);
|
||||||
|
|
||||||
|
@ -139,7 +124,7 @@ void SplashScreen::createNodes()
|
||||||
geometry->setColorBinding(osg::Geometry::BIND_OVERALL);
|
geometry->setColorBinding(osg::Geometry::BIND_OVERALL);
|
||||||
geometry->addPrimitiveSet(new osg::DrawArrays(GL_POLYGON, 0, 4));
|
geometry->addPrimitiveSet(new osg::DrawArrays(GL_POLYGON, 0, 4));
|
||||||
|
|
||||||
stateSet = geometry->getOrCreateStateSet();
|
osg::StateSet* stateSet = geometry->getOrCreateStateSet();
|
||||||
stateSet->setTextureMode(0, GL_TEXTURE_RECTANGLE, osg::StateAttribute::ON);
|
stateSet->setTextureMode(0, GL_TEXTURE_RECTANGLE, osg::StateAttribute::ON);
|
||||||
stateSet->setTextureAttribute(0, splashTexture);
|
stateSet->setTextureAttribute(0, splashTexture);
|
||||||
|
|
||||||
|
@ -270,6 +255,29 @@ void SplashScreen::createNodes()
|
||||||
addChild(_splashQuadCamera);
|
addChild(_splashQuadCamera);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
osg::ref_ptr<osg::Camera> SplashScreen::createFBOCamera()
|
||||||
|
{
|
||||||
|
osg::ref_ptr<osg::Camera> c = new osg::Camera;
|
||||||
|
c->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
|
||||||
|
c->setViewMatrix(osg::Matrix::identity());
|
||||||
|
c->setClearMask( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||||
|
c->setClearColor( osg::Vec4( 0., 0., 0., 0. ) );
|
||||||
|
c->setAllowEventFocus(false);
|
||||||
|
c->setCullingActive(false);
|
||||||
|
c->setRenderTargetImplementation( osg::Camera::FRAME_BUFFER_OBJECT );
|
||||||
|
c->setRenderOrder(osg::Camera::PRE_RENDER);
|
||||||
|
c->attach(osg::Camera::COLOR_BUFFER, _splashFBOTexture);
|
||||||
|
|
||||||
|
osg::StateSet* stateSet = c->getOrCreateStateSet();
|
||||||
|
stateSet->setMode(GL_ALPHA_TEST, osg::StateAttribute::OFF);
|
||||||
|
stateSet->setMode(GL_CULL_FACE, osg::StateAttribute::OFF);
|
||||||
|
stateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);
|
||||||
|
stateSet->setAttribute(new osg::Depth(osg::Depth::ALWAYS, 0, 1, false));
|
||||||
|
stateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
void SplashScreen::setupLogoImage()
|
void SplashScreen::setupLogoImage()
|
||||||
{
|
{
|
||||||
// check for a logo image, add underneath other text
|
// check for a logo image, add underneath other text
|
||||||
|
@ -422,7 +430,7 @@ std::string SplashScreen::selectSplashImage()
|
||||||
|
|
||||||
// no splash screen specified - select random image
|
// no splash screen specified - select random image
|
||||||
SGPath tpath = globals->get_fg_root() / "Textures";
|
SGPath tpath = globals->get_fg_root() / "Textures";
|
||||||
int num = (int)(sg_random() * 5.0 + 1.0);
|
int num = (int)(sg_random() * 3.0 + 1.0);
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << "Splash" << num << ".png";
|
oss << "Splash" << num << ".png";
|
||||||
tpath.append(oss.str());
|
tpath.append(oss.str());
|
||||||
|
@ -502,6 +510,24 @@ void SplashScreen::updateSplashSpinner()
|
||||||
_splashSpinnerVertexArray->dirty();
|
_splashSpinnerVertexArray->dirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// remove once we require OSG 3.4
|
||||||
|
void SplashScreen::manuallyResizeFBO(int width, int height)
|
||||||
|
{
|
||||||
|
_splashFBOTexture->setTextureSize(width, height);
|
||||||
|
_splashFBOTexture->dirtyTextureObject();
|
||||||
|
|
||||||
|
osg::ref_ptr<osg::Camera> newCam = createFBOCamera();
|
||||||
|
|
||||||
|
// swap everything around
|
||||||
|
for (int i=0; i<_splashFBOCamera->getNumChildren(); ++i) {
|
||||||
|
newCam->addChild(_splashFBOCamera->getChild(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
addChild(newCam);
|
||||||
|
removeChild(_splashFBOCamera);
|
||||||
|
_splashFBOCamera = newCam;
|
||||||
|
}
|
||||||
|
|
||||||
void SplashScreen::resize( int width, int height )
|
void SplashScreen::resize( int width, int height )
|
||||||
{
|
{
|
||||||
if (getNumChildren() == 0) {
|
if (getNumChildren() == 0) {
|
||||||
|
@ -510,13 +536,17 @@ void SplashScreen::resize( int width, int height )
|
||||||
|
|
||||||
_width = width;
|
_width = width;
|
||||||
_height = height;
|
_height = height;
|
||||||
|
|
||||||
|
_splashQuadCamera->setViewport(0, 0, width, height);
|
||||||
|
#if OSG_VERSION_LESS_THAN(3,4,0)
|
||||||
|
manuallyResizeFBO(width, height);
|
||||||
|
#else
|
||||||
|
_splashFBOCamera->resizeAttachments(width, height);
|
||||||
|
#endif
|
||||||
_splashFBOCamera->setViewport(0, 0, width, height);
|
_splashFBOCamera->setViewport(0, 0, width, height);
|
||||||
_splashFBOCamera->setProjectionMatrixAsOrtho2D(-width * 0.5, width * 0.5,
|
_splashFBOCamera->setProjectionMatrixAsOrtho2D(-width * 0.5, width * 0.5,
|
||||||
-height * 0.5, height * 0.5);
|
-height * 0.5, height * 0.5);
|
||||||
|
|
||||||
_splashQuadCamera->setViewport(0, 0, width, height);
|
|
||||||
_splashFBOCamera->resizeAttachments(width, height);
|
|
||||||
|
|
||||||
double halfWidth = width * 0.5;
|
double halfWidth = width * 0.5;
|
||||||
double halfHeight = height * 0.5;
|
double halfHeight = height * 0.5;
|
||||||
const double screenAspectRatio = static_cast<double>(width) / height;
|
const double screenAspectRatio = static_cast<double>(width) / height;
|
||||||
|
|
|
@ -65,6 +65,9 @@ private:
|
||||||
double maxWidthFraction = -1.0,
|
double maxWidthFraction = -1.0,
|
||||||
const osg::Vec4& textColor = osg::Vec4(1, 1, 1, 1));
|
const osg::Vec4& textColor = osg::Vec4(1, 1, 1, 1));
|
||||||
|
|
||||||
|
osg::ref_ptr<osg::Camera> createFBOCamera();
|
||||||
|
void manuallyResizeFBO(int width, int height);
|
||||||
|
|
||||||
bool _legacySplashScreenMode = false;
|
bool _legacySplashScreenMode = false;
|
||||||
SGPropertyNode_ptr _splashAlphaNode;
|
SGPropertyNode_ptr _splashAlphaNode;
|
||||||
osg::ref_ptr<osg::Camera> _splashFBOCamera;
|
osg::ref_ptr<osg::Camera> _splashFBOCamera;
|
||||||
|
|
Loading…
Reference in a new issue