diff --git a/simgear/scene/util/CMakeLists.txt b/simgear/scene/util/CMakeLists.txt index 4c523c9d..124f0ba5 100644 --- a/simgear/scene/util/CMakeLists.txt +++ b/simgear/scene/util/CMakeLists.txt @@ -4,7 +4,8 @@ set(HEADERS CopyOp.hxx DeletionManager.hxx NodeAndDrawableVisitor.hxx - Noise.hxx + Noise.hxx + OptionsReadFileCallback.hxx OsgMath.hxx OsgSingleton.hxx PrimitiveUtils.hxx @@ -31,7 +32,8 @@ set(SOURCES CopyOp.cxx DeletionManager.cxx NodeAndDrawableVisitor.cxx - Noise.cxx + Noise.cxx + OptionsReadFileCallback.cxx PrimitiveUtils.cxx QuadTreeBuilder.cxx SGEnlargeBoundingBox.cxx diff --git a/simgear/scene/util/OptionsReadFileCallback.cxx b/simgear/scene/util/OptionsReadFileCallback.cxx new file mode 100644 index 00000000..7df57cc3 --- /dev/null +++ b/simgear/scene/util/OptionsReadFileCallback.cxx @@ -0,0 +1,93 @@ +// Copyright (C) 2012 Mathias Froehlich +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "OptionsReadFileCallback.hxx" + +#include + +namespace simgear { + +OptionsReadFileCallback::~OptionsReadFileCallback() +{ +} + +osgDB::ReaderWriter::ReadResult +OptionsReadFileCallback::openArchive(const std::string& name, osgDB::ReaderWriter::ArchiveStatus status, + unsigned int indexBlockSizeHint, const osgDB::Options* options) +{ + osgDB::ReadFileCallback* callback = osgDB::Registry::instance()->getReadFileCallback(); + if (callback) + return callback->openArchive(name, status, indexBlockSizeHint, options); + else + return osgDB::ReadFileCallback::openArchive(name, status, indexBlockSizeHint, options); +} + +osgDB::ReaderWriter::ReadResult +OptionsReadFileCallback::readObject(const std::string& name, const osgDB::Options* options) +{ + osgDB::ReadFileCallback* callback = osgDB::Registry::instance()->getReadFileCallback(); + if (callback) + return callback->readObject(name, options); + else + return osgDB::ReadFileCallback::readObject(name, options); +} + +osgDB::ReaderWriter::ReadResult +OptionsReadFileCallback::readImage(const std::string& name, const osgDB::Options* options) +{ + osgDB::ReadFileCallback* callback = osgDB::Registry::instance()->getReadFileCallback(); + if (callback) + return callback->readImage(name, options); + else + return osgDB::ReadFileCallback::readImage(name, options); +} + +osgDB::ReaderWriter::ReadResult +OptionsReadFileCallback::readHeightField(const std::string& name, const osgDB::Options* options) +{ + osgDB::ReadFileCallback* callback = osgDB::Registry::instance()->getReadFileCallback(); + if (callback) + return callback->readHeightField(name, options); + else + return osgDB::ReadFileCallback::readHeightField(name, options); +} + +osgDB::ReaderWriter::ReadResult +OptionsReadFileCallback::readNode(const std::string& name, const osgDB::Options* options) +{ + osgDB::ReadFileCallback* callback = osgDB::Registry::instance()->getReadFileCallback(); + if (callback) + return callback->readNode(name, options); + else + return osgDB::ReadFileCallback::readNode(name, options); +} + +osgDB::ReaderWriter::ReadResult +OptionsReadFileCallback::readShader(const std::string& name, const osgDB::Options* options) +{ + osgDB::ReadFileCallback* callback = osgDB::Registry::instance()->getReadFileCallback(); + if (callback) + return callback->readShader(name, options); + else + return osgDB::ReadFileCallback::readShader(name, options); +} + +} diff --git a/simgear/scene/util/OptionsReadFileCallback.hxx b/simgear/scene/util/OptionsReadFileCallback.hxx new file mode 100644 index 00000000..102de2ac --- /dev/null +++ b/simgear/scene/util/OptionsReadFileCallback.hxx @@ -0,0 +1,54 @@ +// Copyright (C) 2012 Mathias Froehlich +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// + +#ifndef SIMGEAR_READFILECALLBACK_HXX +#define SIMGEAR_READFILECALLBACK_HXX 1 + +#include + +namespace simgear { + +/// Read file callback that calls also back into the registrys read file callback. + +class OptionsReadFileCallback : public osgDB::ReadFileCallback { +public: + virtual osgDB::ReaderWriter::ReadResult + openArchive(const std::string& name, osgDB::ReaderWriter::ArchiveStatus status, + unsigned int indexBlockSizeHint, const osgDB::Options* options); + + virtual osgDB::ReaderWriter::ReadResult + readObject(const std::string& name, const osgDB::Options* options); + + virtual osgDB::ReaderWriter::ReadResult + readImage(const std::string& name, const osgDB::Options* options); + + virtual osgDB::ReaderWriter::ReadResult + readHeightField(const std::string& name, const osgDB::Options* options); + + virtual osgDB::ReaderWriter::ReadResult + readNode(const std::string& name, const osgDB::Options* options); + + virtual osgDB::ReaderWriter::ReadResult + readShader(const std::string& name, const osgDB::Options* options); + +protected: + virtual ~OptionsReadFileCallback(); +}; + +} + +#endif