Commit 0aa3296f authored by Robert Menzel's avatar Robert Menzel
Browse files

started on geometry loading from files

parent 489831af
...@@ -27,12 +27,11 @@ ...@@ -27,12 +27,11 @@
#include <ACGL/OpenGL/Controller/ShaderControlFile.hh> #include <ACGL/OpenGL/Controller/ShaderControlFile.hh>
#include <ACGL/OpenGL/Controller/ShaderProgramControlFiles.hh> #include <ACGL/OpenGL/Controller/ShaderProgramControlFiles.hh>
#include <ACGL/OpenGL/Controller/ShaderProgramObjectControl.hh> #include <ACGL/OpenGL/Controller/ShaderProgramObjectControl.hh>
#include <ACGL/OpenGL/Controller/TextureDataControlFileFactory.hh> #include <ACGL/OpenGL/Controller/DataControlFileFactory.hh>
#include <ACGL/OpenGL/Controller/TextureDataControlFileJPG.hh> #include <ACGL/OpenGL/Controller/TextureDataControlFileJPG.hh>
#include <ACGL/OpenGL/Controller/TextureControl.hh> #include <ACGL/OpenGL/Controller/TextureControl.hh>
#include <ACGL/OpenGL/Controller/TextureControlCubeMap.hh> #include <ACGL/OpenGL/Controller/TextureControlCubeMap.hh>
#include <ACGL/OpenGL/Controller/TextureControlFile.hh> #include <ACGL/OpenGL/Controller/TextureControlFile.hh>
#include <ACGL/OpenGL/Controller/TextureControlFileJPG.hh>
#include <ACGL/OpenGL/Controller/UniformControl.hh> #include <ACGL/OpenGL/Controller/UniformControl.hh>
#include <ACGL/OpenGL/Controller/ViewportControl.hh> #include <ACGL/OpenGL/Controller/ViewportControl.hh>
......
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2011, Computer Graphics Group RWTH Aachen University // // Copyright (c) 2011, 2012 Computer Graphics Group RWTH Aachen University //
// All rights reserved. // // All rights reserved. //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#ifndef ACGL_OPENGL_CONTROLLER_TEXTUREDATACONTROLFILE_HH #ifndef ACGL_OPENGL_CONTROLLER_TEXTUREDATACONTROLFILE_HH
#define ACGL_OPENGL_CONTROLLER_TEXTUREDATACONTROLFILE_HH #define ACGL_OPENGL_CONTROLLER_TEXTUREDATACONTROLFILE_HH
/**
* Basetemplate for file loading.
*
* TextureDataControlFile and GeometryDataControlFile are typedefs below
*
* To support another filetype, derive from those and implement load() and registerType() methods.
* Also: add a call to the InitStaticFileTypes to register the file type globally.
*/
#include <ACGL/ACGL.hh> #include <ACGL/ACGL.hh>
#include <ACGL/Resource/FileController.hh> #include <ACGL/Resource/FileController.hh>
#include <ACGL/Base/Settings.hh> #include <ACGL/Base/Settings.hh>
#include <ACGL/OpenGL/Data/TextureData.hh> #include <ACGL/OpenGL/Data/TextureData.hh>
#include <ACGL/OpenGL/Data/GeometryData.hh>
namespace ACGL{ namespace ACGL{
namespace OpenGL{ namespace OpenGL{
class TextureDataControlFile : public Resource::FileController<TextureData> template<class DATA_FILE_TYPE>
class DataControlFile : public Resource::FileController<DATA_FILE_TYPE>
{ {
private:
typedef ptr::shared_ptr< DATA_FILE_TYPE > SharedDATA_FILE_TYPE;
// ========================================================================================================= \/ // ========================================================================================================= \/
// ============================================================================================ CONSTRUCTORS \/ // ============================================================================================ CONSTRUCTORS \/
// ========================================================================================================= \/ // ========================================================================================================= \/
public: public:
TextureDataControlFile(const std::string& _filename) DataControlFile(const std::string& _filename)
: Resource::FileController<TextureData>(_filename, Base::Settings::the()->getFullTexturePath()) : Resource::FileController<DATA_FILE_TYPE>(_filename, Base::Settings::the()->getFullTexturePath())
{} {}
virtual ~TextureDataControlFile(void) {} virtual ~DataControlFile(void) {}
// ====================================================================================================== \/ // ====================================================================================================== \/
// ============================================================================================ INTERFACE \/ // ============================================================================================ INTERFACE \/
// ====================================================================================================== \/ // ====================================================================================================== \/
private: private:
virtual bool load(SharedTextureData& texture) const = 0; virtual bool load(SharedDATA_FILE_TYPE& texture) const = 0;
// ====================================================================================================== \/ // ====================================================================================================== \/
// ============================================================================================= OVERRIDE \/ // ============================================================================================= OVERRIDE \/
// ====================================================================================================== \/ // ====================================================================================================== \/
public: public:
virtual SharedTextureData create(void); virtual SharedDATA_FILE_TYPE create(void)
virtual bool update(SharedTextureData& _texture); {
Resource::FileController<DATA_FILE_TYPE>::updateFileModificationTime();
SharedDATA_FILE_TYPE texture(new DATA_FILE_TYPE());
if(load(texture))
return texture;
return SharedDATA_FILE_TYPE();
}
virtual bool update(SharedDATA_FILE_TYPE& _texture)
{
if (Resource::FileController<DATA_FILE_TYPE>::fileIsUpToDate())
return false;
if(!load(_texture))
return false;
Resource::FileController<DATA_FILE_TYPE>::updateFileModificationTime();
return true;
}
// ==================================================================================================== \/
// ============================================================================================ METHODS \/
// ==================================================================================================== \/
public:
static int_t getTypeID(void) { return sTypeID; }
// =================================================================================================== \/
// ============================================================================================ FIELDS \/
// =================================================================================================== \/
protected:
static int_t sTypeID;
}; };
ACGL_SMARTPOINTER_TYPEDEFS(TextureDataControlFile) typedef DataControlFile< TextureData > TextureDataControlFile;
ACGL_SMARTPOINTER_TYPEDEFS( TextureDataControlFile )
typedef DataControlFile< GeometryData > GeometryDataControlFile;
ACGL_SMARTPOINTER_TYPEDEFS( GeometryDataControlFile )
} // OpenGL } // OpenGL
} // ACGL } // ACGL
......
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2011, Computer Graphics Group RWTH Aachen University // // Copyright (c) 2011, 2012 Computer Graphics Group RWTH Aachen University //
// All rights reserved. // // All rights reserved. //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#ifndef ACGL_OPENGL_CONTROLLER_TEXTURECONTROLFILEJPG_HH #ifndef ACGL_OPENGL_CONTROLLER_DATACONTROLFILEFACTORY_HH
#define ACGL_OPENGL_CONTROLLER_TEXTURECONTROLFILEJPG_HH #define ACGL_OPENGL_CONTROLLER_DATACONTROLFILEFACTORY_HH
/**
* Image loaders can register the supported types at TextureDataControlFileFactory so a call like
* ... = TextureControlFile("bunny.ppm").create();
* will find the correct loader of the given file ending.
*/
#include <ACGL/ACGL.hh> #include <ACGL/ACGL.hh>
#include <ACGL/Resource/FileController.hh> #include <ACGL/Base/Singleton.hh>
#include <ACGL/Base/Settings.hh> #include <ACGL/OpenGL/Controller/DataControlFile.hh>
#include <ACGL/OpenGL/Objects/Texture.hh> #include <ACGL/Base/StringOperations.hh>
#include <ACGL/OpenGL/GL.hh>
#include <map>
#include <string>
namespace ACGL{ namespace ACGL{
namespace OpenGL{ namespace OpenGL{
class TextureControlFileJPG : public Resource::FileController<Texture> //
// Generic FileFactories:
//
template<class DATA_CONTROL_FILE_TYPE>
class DataControlFileFactory : public Base::Singleton< DataControlFileFactory<DATA_CONTROL_FILE_TYPE> >
{ {
ACGL_SINGLETON(DataControlFileFactory)
// ========================================================================================================= \/
// ================================================================================================ TYPEDEFS \/
// ========================================================================================================= \/
private:
typedef DATA_CONTROL_FILE_TYPE (*factoryCreate)(const std::string&);
typedef std::map<std::string, factoryCreate> FactoryMap;
// ========================================================================================================= \/ // ========================================================================================================= \/
// ============================================================================================ CONSTRUCTORS \/ // ============================================================================================ CONSTRUCTORS \/
// ========================================================================================================= \/ // ========================================================================================================= \/
protected:
DataControlFileFactory(void) : mRegisteredTypes(0), mFactoryMap() {}
public: public:
TextureControlFileJPG(const std::string& _filename) virtual ~DataControlFileFactory(void) {}
: Resource::FileController<Texture>(_filename, Base::Settings::the()->getFullTexturePath()),
mMinFilter(0), // ========================================================================================================= \/
mMagFilter(0), // ================================================================================================= METHODS \/
mAnisotropicFilter(0.0f), // ========================================================================================================= \/
mWrapS(0),
mWrapT(0),
mWrapR(0)
{}
virtual ~TextureControlFileJPG(void) {}
// ==================================================================================================== \/
// ============================================================================================ METHODS \/
// ==================================================================================================== \/
public: public:
inline TextureControlFileJPG& minFilter (GLint _minFilter) { mMinFilter = _minFilter; return *this; } int_t getRegisteredTypes(void) const { return mRegisteredTypes; }
inline TextureControlFileJPG& magFilter (GLint _magFilter) { mMagFilter = _magFilter; return *this; }
inline TextureControlFileJPG& anisotropicFilter (GLfloat _anisotropicFilter) { mAnisotropicFilter = _anisotropicFilter; return *this; }
inline TextureControlFileJPG& wrap (GLenum _wrapS, GLenum _wrapT = 0, GLenum _wrapR = 0) int_t registerType(const std::string& _type, factoryCreate _creator)
{ {
mWrapS = _wrapS; ACGL::Utils::debug() << "DataControlFileFactory register type: " << _type << " with id " << mRegisteredTypes << std::endl;
mWrapT = _wrapT; mFactoryMap[_type] = _creator;
mWrapR = _wrapR; return mRegisteredTypes++;
return *this;
} }
private: DATA_CONTROL_FILE_TYPE create(const std::string& _filename) const
bool loadJPG(SharedTexture& texture); {
std::string file;
std::string extension;
ACGL::Base::StringOperations::splitFileExtension(_filename, file, extension);
typename FactoryMap::const_iterator existingCreator = mFactoryMap.find(extension);
if (existingCreator != mFactoryMap.end()) {
return existingCreator->second(_filename);
}
return DATA_CONTROL_FILE_TYPE();
}
// ===================================================================================================== \/
// ============================================================================================ OVERRIDE \/
// ===================================================================================================== \/
public:
virtual SharedTexture create(void);
virtual bool update(SharedTexture& texture);
// =================================================================================================== \/ // ========================================================================================================= \/
// ============================================================================================ FIELDS \/ // ================================================================================================== FIELDS \/
// =================================================================================================== \/ // ========================================================================================================= \/
protected: private:
GLint mMinFilter; int_t mRegisteredTypes;
GLint mMagFilter; FactoryMap mFactoryMap;
GLfloat mAnisotropicFilter;
GLenum mWrapS;
GLenum mWrapT;
GLenum mWrapR;
}; };
//
// Individual FileFactories:
//
typedef DataControlFileFactory< SharedTextureDataControlFile > TextureDataControlFileFactory;
typedef DataControlFileFactory< SharedGeometryDataControlFile > GeometryDataControlFileFactory;
} // OpenGL } // OpenGL
} // ACGL } // ACGL
#endif // ACGL_OPENGL_CONTROLLER_TEXTURECONTROLFILEJPG_HH #endif // ACGL_OPENGL_CONTROLLER_DATACONTROLFILEFACTORY_HH
...@@ -6,6 +6,11 @@ ...@@ -6,6 +6,11 @@
#ifndef ACGL_OPENGL_CONTROLLER_TEXTURECONTROL_HH #ifndef ACGL_OPENGL_CONTROLLER_TEXTURECONTROL_HH
#define ACGL_OPENGL_CONTROLLER_TEXTURECONTROL_HH #define ACGL_OPENGL_CONTROLLER_TEXTURECONTROL_HH
/**
* Can create an empty texture, if a texture should get loaded from a file,
* see TextureControlFile.
*/
#include <ACGL/ACGL.hh> #include <ACGL/ACGL.hh>
#include <ACGL/Resource/BasicCreateController.hh> #include <ACGL/Resource/BasicCreateController.hh>
......
...@@ -6,6 +6,10 @@ ...@@ -6,6 +6,10 @@
#ifndef ACGL_OPENGL_CONTROLLER_TEXTURECONTROLCUBEMAP_HH #ifndef ACGL_OPENGL_CONTROLLER_TEXTURECONTROLCUBEMAP_HH
#define ACGL_OPENGL_CONTROLLER_TEXTURECONTROLCUBEMAP_HH #define ACGL_OPENGL_CONTROLLER_TEXTURECONTROLCUBEMAP_HH
/**
* Can set up a cube map out of multiple TextureData objects.
*/
#include <ACGL/ACGL.hh> #include <ACGL/ACGL.hh>
#include <ACGL/Resource/BasicCreateController.hh> #include <ACGL/Resource/BasicCreateController.hh>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include <ACGL/ACGL.hh> #include <ACGL/ACGL.hh>
#include <ACGL/Resource/FileController.hh> #include <ACGL/Resource/FileController.hh>
#include <ACGL/OpenGL/Controller/TextureDataControlFile.hh> #include <ACGL/OpenGL/Controller/DataControlFile.hh>
#include <ACGL/OpenGL/Objects/Texture.hh> #include <ACGL/OpenGL/Objects/Texture.hh>
namespace ACGL{ namespace ACGL{
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include <ACGL/ACGL.hh> #include <ACGL/ACGL.hh>
#include <ACGL/OpenGL/Controller/TextureDataControlFile.hh> #include <ACGL/OpenGL/Controller/DataControlFile.hh>
#include <ACGL/OpenGL/InitStaticFileTypes.hh> #include <ACGL/OpenGL/InitStaticFileTypes.hh>
namespace ACGL{ namespace ACGL{
...@@ -35,20 +35,8 @@ public: ...@@ -35,20 +35,8 @@ public:
private: private:
virtual bool load(SharedTextureData& texture) const; virtual bool load(SharedTextureData& texture) const;
// ==================================================================================================== \/
// ============================================================================================ METHODS \/
// ==================================================================================================== \/
public:
static int_t getTypeID(void) { return sTypeID; }
private: private:
static int_t registerType(void); static int_t registerType(void);
// =================================================================================================== \/
// ============================================================================================ FIELDS \/
// =================================================================================================== \/
private:
static int_t sTypeID;
}; };
ACGL_SMARTPOINTER_TYPEDEFS(TextureDataControlFileJPG) ACGL_SMARTPOINTER_TYPEDEFS(TextureDataControlFileJPG)
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include <ACGL/ACGL.hh> #include <ACGL/ACGL.hh>
#include <ACGL/OpenGL/Controller/TextureDataControlFile.hh> #include <ACGL/OpenGL/Controller/DataControlFile.hh>
#include <ACGL/OpenGL/InitStaticFileTypes.hh> #include <ACGL/OpenGL/InitStaticFileTypes.hh>
namespace ACGL{ namespace ACGL{
...@@ -35,20 +35,8 @@ public: ...@@ -35,20 +35,8 @@ public:
private: private:
virtual bool load(SharedTextureData& texture) const; virtual bool load(SharedTextureData& texture) const;
// ==================================================================================================== \/
// ============================================================================================ METHODS \/
// ==================================================================================================== \/
public:
static int_t getTypeID(void) { return sTypeID; }
private: private:
static int_t registerType(void); static int_t registerType(void);
// =================================================================================================== \/
// ============================================================================================ FIELDS \/
// =================================================================================================== \/
private:
static int_t sTypeID;
}; };
ACGL_SMARTPOINTER_TYPEDEFS(TextureDataControlFilePNG) ACGL_SMARTPOINTER_TYPEDEFS(TextureDataControlFilePNG)
......
...@@ -6,9 +6,14 @@ ...@@ -6,9 +6,14 @@
#ifndef ACGL_OPENGL_CONTROLLER_TEXTUREDATACONTROLFILEPPM_HH #ifndef ACGL_OPENGL_CONTROLLER_TEXTUREDATACONTROLFILEPPM_HH
#define ACGL_OPENGL_CONTROLLER_TEXTUREDATACONTROLFILEPPM_HH #define ACGL_OPENGL_CONTROLLER_TEXTUREDATACONTROLFILEPPM_HH
/**
* A minimal ppm loader (with some bugs). No external dependencies, so this is at least
* one image type that can be loaded without extra libs.
*/
#include <ACGL/ACGL.hh> #include <ACGL/ACGL.hh>
#include <ACGL/OpenGL/Controller/TextureDataControlFile.hh> #include <ACGL/OpenGL/Controller/DataControlFile.hh>
#include <ACGL/OpenGL/InitStaticFileTypes.hh> #include <ACGL/OpenGL/InitStaticFileTypes.hh>
namespace ACGL{ namespace ACGL{
...@@ -35,20 +40,8 @@ public: ...@@ -35,20 +40,8 @@ public:
private: private:
virtual bool load(SharedTextureData& texture) const; virtual bool load(SharedTextureData& texture) const;
// ==================================================================================================== \/
// ============================================================================================ METHODS \/
// ==================================================================================================== \/
public:
static int_t getTypeID(void) { return sTypeID; }
private: private:
static int_t registerType(void); static int_t registerType(void);
// =================================================================================================== \/
// ============================================================================================ FIELDS \/
// =================================================================================================== \/
private:
static int_t sTypeID;
}; };
ACGL_SMARTPOINTER_TYPEDEFS(TextureDataControlFilePPM) ACGL_SMARTPOINTER_TYPEDEFS(TextureDataControlFilePPM)
......
<
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2011, Computer Graphics Group RWTH Aachen University // // Copyright (c) 2011, 2012 Computer Graphics Group RWTH Aachen University //
// All rights reserved. // // All rights reserved. //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#ifndef ACGL_OPENGL_CONTROLLER_TEXTUREDATACONTROLFILEFACTORY_HH #ifndef ACGL_OPENGL_DATA_GEOMETRYDATA_HH
#define ACGL_OPENGL_CONTROLLER_TEXTUREDATACONTROLFILEFACTORY_HH #define ACGL_OPENGL_DATA_GEOMETRYDATA_HH
#include <ACGL/ACGL.hh> /**
*/
#include <ACGL/Base/Singleton.hh> #include <ACGL/ACGL.hh>
#include <ACGL/OpenGL/Controller/TextureDataControlFile.hh>
#include <map> #include <ACGL/Base/Macros.hh>
#include <string> #include <ACGL/OpenGL/GL.hh>
#include <ACGL/OpenGL/Objects/ArrayBuffer.hh> // get Attribute definition
namespace ACGL{ namespace ACGL{
namespace OpenGL{ namespace OpenGL{
class TextureDataControlFileFactory : public Base::Singleton< TextureDataControlFileFactory > class GeometryData
{ {
ACGL_SINGLETON(TextureDataControlFileFactory)
// ========================================================================================================= \/ // ========================================================================================================= \/
// ================================================================================================ TYPEDEFS \/ // ============================================================================================ CONSTRUCTORS \/
// ========================================================================================================= \/ // ========================================================================================================= \/
private: public: