00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _CEGUIOpenGLRenderer_h_
00029 #define _CEGUIOpenGLRenderer_h_
00030
00031 #include "../../CEGUIBase.h"
00032 #include "../../CEGUIRenderer.h"
00033 #include "../../CEGUISize.h"
00034 #include "../../CEGUIVector.h"
00035 #include "CEGUIOpenGL.h"
00036 #include <vector>
00037
00038 #if (defined( __WIN32__ ) || defined( _WIN32 )) && !defined(CEGUI_STATIC)
00039 # ifdef OPENGL_GUIRENDERER_EXPORTS
00040 # define OPENGL_GUIRENDERER_API __declspec(dllexport)
00041 # else
00042 # define OPENGL_GUIRENDERER_API __declspec(dllimport)
00043 # endif
00044 #else
00045 # define OPENGL_GUIRENDERER_API
00046 #endif
00047
00048 #if defined(_MSC_VER)
00049 # pragma warning(push)
00050 # pragma warning(disable : 4251)
00051 #endif
00052
00053
00054
00055 namespace CEGUI
00056 {
00057 class OpenGLTexture;
00058 class OpenGLTextureTarget;
00059 class OpenGLGeometryBuffer;
00060 class OGLTextureTargetFactory;
00061
00066 class OPENGL_GUIRENDERER_API OpenGLRenderer : public Renderer
00067 {
00068 public:
00070 enum TextureTargetType
00071 {
00073 TTT_AUTO,
00075 TTT_FBO,
00077 TTT_PBUFFER,
00079 TTT_NONE
00080 };
00081
00090 static OpenGLRenderer& create(const TextureTargetType tt_type = TTT_AUTO);
00091
00103 static OpenGLRenderer& create(const Size& display_size,
00104 const TextureTargetType tt_type = TTT_AUTO);
00105
00113 static void destroy(OpenGLRenderer& renderer);
00114
00115
00116 RenderingRoot& getDefaultRenderingRoot();
00117 GeometryBuffer& createGeometryBuffer();
00118 void destroyGeometryBuffer(const GeometryBuffer& buffer);
00119 void destroyAllGeometryBuffers();
00120 TextureTarget* createTextureTarget();
00121 void destroyTextureTarget(TextureTarget* target);
00122 void destroyAllTextureTargets();
00123 Texture& createTexture();
00124 Texture& createTexture(const String& filename, const String& resourceGroup);
00125 Texture& createTexture(const Size& size);
00126 void destroyTexture(Texture& texture);
00127 void destroyAllTextures();
00128 void beginRendering();
00129 void endRendering();
00130 void setDisplaySize(const Size& sz);
00131 const Size& getDisplaySize() const;
00132 const Vector2& getDisplayDPI() const;
00133 uint getMaxTextureSize() const;
00134 const String& getIdentifierString() const;
00135
00150 Texture& createTexture(GLuint tex, const Size& sz);
00151
00163 void enableExtraStateSettings(bool setting);
00164
00172 void grabTextures();
00173
00179 void restoreTextures();
00180
00192 Size getAdjustedTextureSize(const Size& sz) const;
00193
00199 static float getNextPOTSize(const float f);
00200
00201 private:
00210 OpenGLRenderer(const TextureTargetType tt_type);
00211
00223 OpenGLRenderer(const Size& display_size, const TextureTargetType tt_type);
00224
00229 virtual ~OpenGLRenderer();
00230
00232 void setupExtraStates();
00233
00235 void cleanupExtraStates();
00236
00238 void initialiseTextureTargetFactory(const TextureTargetType tt_type);
00239
00241 static String d_rendererID;
00243 Size d_displaySize;
00245 Vector2 d_displayDPI;
00247 RenderingRoot* d_defaultRoot;
00249 RenderTarget* d_defaultTarget;
00251 typedef std::vector<TextureTarget*> TextureTargetList;
00253 TextureTargetList d_textureTargets;
00255 typedef std::vector<OpenGLGeometryBuffer*> GeometryBufferList;
00257 GeometryBufferList d_geometryBuffers;
00259 typedef std::vector<OpenGLTexture*> TextureList;
00261 TextureList d_textures;
00263 uint d_maxTextureSize;
00265 bool d_initExtraStates;
00267 OGLTextureTargetFactory* d_textureTargetFactory;
00268 };
00269
00270 }
00271
00272 #if defined(_MSC_VER)
00273 # pragma warning(pop)
00274 #endif
00275
00276 #endif // end of guard _CEGUIOpenGLRenderer_h_