00001 /* 00002 * OpenGL texture header 00003 * 00004 * This file is part of the "SoftPixel Engine" (Copyright (c) 2008 by Lukas Hermanns) 00005 * See "SoftPixelEngine.hpp" for license information. 00006 */ 00007 00008 #ifndef __SP_VIDEODRIVER_OPENGLTEXTURE_H__ 00009 #define __SP_VIDEODRIVER_OPENGLTEXTURE_H__ 00010 00011 00012 #include "Base/spStandard.hpp" 00013 00014 #if defined(SP_COMPILE_WITH_OPENGL) 00015 00016 00017 #include "RenderSystem/OpenGL/spOpenGLTextureBase.hpp" 00018 #include "RenderSystem/OpenGL/spOpenGLFramebufferObject.hpp" 00019 00020 00021 namespace sp 00022 { 00023 namespace video 00024 { 00025 00026 00027 class SP_EXPORT OpenGLTexture : public GLTextureBase, public GLFramebufferObject 00028 { 00029 00030 public: 00031 00032 OpenGLTexture(); 00033 OpenGLTexture(const STextureCreationFlags &CreationFlags); 00034 ~OpenGLTexture(); 00035 00036 /* Functions */ 00037 00038 void setCubeMapFace(const ECubeMapDirections Face); 00039 void setArrayLayer(u32 Layer); 00040 00041 bool shareImageBuffer(); 00042 bool updateImageBuffer(); 00043 bool updateImageBuffer(const dim::point2di &Pos, const dim::size2di &Size); 00044 00045 private: 00046 00047 friend class GLProgrammableFunctionPipeline; 00048 friend class GLFramebufferObject; 00049 00050 /* Private functions */ 00051 00052 void updateMultiRenderTargets(); 00053 void updateFramebufferMultisample(); 00054 00055 void updateFormatAndDimension(); 00056 00057 void updateHardwareFormats(); 00058 void updateHardwareTexture( 00059 dim::vector3di Size, const u32 PixelSize, const void* ImageBuffer, s32 Level = 0 00060 ); 00061 void updateHardwareTextureArea( 00062 const dim::vector3di &Pos, const dim::vector3di &Size, const void* ImageBuffer, s32 Level = 0 00063 ); 00064 00065 void updateRenderTarget(); 00066 00067 }; 00068 00069 00070 } // /namespace video 00071 00072 } // /namespace sp 00073 00074 00075 #endif 00076 00077 #endif 00078 00079 00080 00081 // ================================================================================