00001 #ifndef __CUBE_MAP__
00002 #define __CUBE_MAP__
00003
00004 #include <OpenGL.h>
00005 #include "TextureData.h"
00006 #include "Image2D.h"
00007 #include "ColorTypes.h"
00008 #include "Vec3.h"
00009 #include <QString>
00010 #include <QStringList>
00011
00012 namespace apig {
00013
00015 template<class Color>
00016 class CubeMap : public TextureData {
00017 public:
00018 CubeMap() : loaded(false) {}
00019 CubeMap(QString dirName);
00020
00021 void initialize(QString dirName);
00022 void destroy();
00023
00024
00025 Color sample(float rx, float ry, float rz) { return sample(Vec3(rx,ry,rz)); }
00026 Color sample(Vec3 r);
00027
00028 virtual GLenum textureMode() const { return GL_TEXTURE_CUBE_MAP; }
00029 virtual GLint defaultTexFormat() const { return face[0][0].defaultTexFormat(); }
00030 virtual void loadToGPU(GLint texFormat) const;
00031
00032 static QStringList namesList(QString dirName, QString first = QString::null);
00033
00034 private:
00035 static GLenum targetName(int i, int j);
00036 static QString imageFileName(int i, int j);
00037
00038 private:
00039 bool loaded;
00040 Image2D<Color> face[3][2];
00041
00042
00043 static const QString axisNames[3];
00044 static const QString signNames[2];
00045
00046 public:
00047 static const GLenum targetNames[6];
00048 };
00049 }
00050
00051 #include "CubeMap_impl.h"
00052
00053 #endif
00054