從類結構上看其繼承與RenderManager和IRenderTarget
架構上設計來說,這點事爲了敞開接口,與硬件實現分離,
通過C++的多態機制來實現接口分離的作用!
void DirectXRenderManager::drawOneFrame()
{
static Timer timer;
//static variable first initialized
//it will keep his value during next change!
static unsigned long last_time = timer.getMilliseconds();
unsigned long now_time = timer.getMilliseconds();
unsigned long time = now_time - last_time;
Gui* gui = Gui::getInstancePtr();
if (gui != nullptr)
gui->_injectFrameEntered((float)((double)(time) / (double)1000));
last_time = now_time;
begin();
LayerManager::getInstance().renderToTarget(this, mUpdate);
end();
mUpdate = false;
}
這個例程中有兩點需要注意:
第一點是gui frame Enter事件的注入
Gui* gui = Gui::getInstancePtr();
if (gui != nullptr)
gui->_injectFrameEntered((float)((double)(time) / (double)1000));
第二點是 LayerManager的渲染過程
begin();
LayerManager::getInstance().renderToTarget(this, mUpdate);
end();
begin 和 end 熟悉的pipe line 格式