1 /*! 2 @file 3 @author Albert Semenov 4 @date 08/2012 5 */ 6 7 #include "MyGUI_ExportRenderManager.h" 8 #include "MyGUI_ExportDiagnostic.h" 9 #include "MyGUI_Gui.h" 10 #include "MyGUI_Timer.h" 11 #include "MyGUI_FactoryManager.h" 12 13 namespace MyGUI 14 { 15 getInstance()16 ExportRenderManager& ExportRenderManager::getInstance() 17 { 18 return *getInstancePtr(); 19 } 20 getInstancePtr()21 ExportRenderManager* ExportRenderManager::getInstancePtr() 22 { 23 return static_cast<ExportRenderManager*>(RenderManager::getInstancePtr()); 24 } 25 ExportRenderManager()26 ExportRenderManager::ExportRenderManager() : 27 mUpdate(false), 28 mCurrentLayer(nullptr) 29 { 30 } 31 initialise()32 void ExportRenderManager::initialise() 33 { 34 MYGUI_PLATFORM_LOG(Info, "* Initialise: " << getClassTypeName()); 35 36 mUpdate = false; 37 38 MYGUI_PLATFORM_LOG(Info, getClassTypeName() << " successfully initialized"); 39 } 40 shutdown()41 void ExportRenderManager::shutdown() 42 { 43 MYGUI_PLATFORM_LOG(Info, "* Shutdown: " << getClassTypeName()); 44 45 destroyAllTextures(); 46 mBatchInfo.clear(); 47 mExportVertexBuffer.clear(); 48 49 MYGUI_PLATFORM_LOG(Info, getClassTypeName() << " successfully shutdown"); 50 } 51 createVertexBuffer()52 IVertexBuffer* ExportRenderManager::createVertexBuffer() 53 { 54 ExportVertexBuffer* buffer = new ExportVertexBuffer(); 55 mExportVertexBuffer.push_back(buffer); 56 57 return buffer; 58 } 59 destroyVertexBuffer(IVertexBuffer * _buffer)60 void ExportRenderManager::destroyVertexBuffer(IVertexBuffer* _buffer) 61 { 62 VectorExportVertexBuffer::iterator item = std::find(mExportVertexBuffer.begin(), mExportVertexBuffer.end(), _buffer); 63 mExportVertexBuffer.erase(item); 64 65 delete _buffer; 66 } 67 doRender(IVertexBuffer * _buffer,ITexture * _texture,size_t _count)68 void ExportRenderManager::doRender(IVertexBuffer* _buffer, ITexture* _texture, size_t _count) 69 { 70 if (_texture == nullptr || _buffer == nullptr || _count == 0) 71 return; 72 73 ExportTexture* texture = static_cast<ExportTexture*>(_texture); 74 ExportVertexBuffer* vertexes = static_cast<ExportVertexBuffer*>(_buffer); 75 76 mBatchInfo.push_back(RenderBatchInfo(vertexes, texture, _count, mCurrentLayer)); 77 } 78 drawOneFrame()79 void ExportRenderManager::drawOneFrame() 80 { 81 Gui* gui = Gui::getInstancePtr(); 82 if (gui == nullptr) 83 return; 84 85 static Timer timer; 86 static unsigned long last_time = timer.getMilliseconds(); 87 unsigned long now_time = timer.getMilliseconds(); 88 unsigned long time = now_time - last_time; 89 90 onFrameEvent((float)((double)(time) / (double)1000)); 91 92 last_time = now_time; 93 94 begin(); 95 onRenderToTarget(this, mUpdate); 96 end(); 97 98 mUpdate = false; 99 } 100 begin()101 void ExportRenderManager::begin() 102 { 103 mBatchInfo.clear(); 104 105 for (VectorExportVertexBuffer::iterator item = mExportVertexBuffer.begin(); item != mExportVertexBuffer.end(); item ++) 106 (*item)->setChange(false); 107 } 108 end()109 void ExportRenderManager::end() 110 { 111 } 112 createTexture(const std::string & _name)113 ITexture* ExportRenderManager::createTexture(const std::string& _name) 114 { 115 return nullptr; 116 } 117 destroyTexture(ITexture * _texture)118 void ExportRenderManager::destroyTexture(ITexture* _texture) 119 { 120 for (MapTexture::iterator textureIter = mTextures.begin(); textureIter != mTextures.end(); textureIter ++) 121 { 122 if ((*textureIter).second == _texture) 123 { 124 delete (*textureIter).second; 125 mTextures.erase(textureIter); 126 break; 127 } 128 } 129 } 130 getTexture(const std::string & _name)131 ITexture* ExportRenderManager::getTexture(const std::string& _name) 132 { 133 MapTexture::iterator textureIter = mTextures.find(_name); 134 if (textureIter != mTextures.end()) 135 return (*textureIter).second; 136 137 return nullptr; 138 } 139 isFormatSupported(PixelFormat _format,TextureUsage _usage)140 bool ExportRenderManager::isFormatSupported(PixelFormat _format, TextureUsage _usage) 141 { 142 return _format == PixelFormat::R8G8B8A8; 143 } 144 setViewSize(int _width,int _height)145 void ExportRenderManager::setViewSize(int _width, int _height) 146 { 147 if (_height == 0) 148 _height = 1; 149 if (_width == 0) 150 _width = 1; 151 152 mViewSize.set(_width, _height); 153 154 mInfo.maximumDepth = 0.0f; 155 mInfo.hOffset = -0.5f / float(mViewSize.width); 156 mInfo.vOffset = -0.5f / float(mViewSize.height); 157 mInfo.aspectCoef = float(mViewSize.height) / float(mViewSize.width); 158 mInfo.pixScaleX = 1.0f / float(mViewSize.width); 159 mInfo.pixScaleY = 1.0f / float(mViewSize.height); 160 161 onResizeView(mViewSize); 162 163 mUpdate = true; 164 } 165 destroyAllTextures()166 void ExportRenderManager::destroyAllTextures() 167 { 168 for (MapTexture::iterator textureIter = mTextures.begin(); textureIter != mTextures.end(); textureIter ++) 169 delete (*textureIter).second; 170 mTextures.clear(); 171 } 172 getInfo()173 const RenderTargetInfo& ExportRenderManager::getInfo() 174 { 175 return mInfo; 176 } 177 getViewSize() const178 const IntSize& ExportRenderManager::getViewSize() const 179 { 180 return mViewSize; 181 } 182 getVertexFormat()183 VertexColourType ExportRenderManager::getVertexFormat() 184 { 185 return VertexColourType::ColourARGB; 186 } 187 getBatchInfo(size_t _index)188 RenderBatchInfo* ExportRenderManager::getBatchInfo(size_t _index) 189 { 190 if (_index < mBatchInfo.size()) 191 return &mBatchInfo[_index]; 192 return nullptr; 193 } 194 addTexture(const std::string & _name,size_t _id,int _width,int _height)195 void ExportRenderManager::addTexture(const std::string& _name, size_t _id, int _width, int _height) 196 { 197 ExportTexture* texture = new ExportTexture(_name); 198 texture->setId(_id); 199 texture->setWidth(_width); 200 texture->setHeight(_height); 201 202 mTextures[_name] = texture; 203 } 204 doRenderLayer(ILayer * _layer)205 void ExportRenderManager::doRenderLayer(ILayer* _layer) 206 { 207 mCurrentLayer = _layer; 208 } 209 210 } 211