diff --git a/source/anim/AnimatedModelShared.cpp b/source/anim/AnimatedModelShared.cpp index b145ecf5759aa4222110478733b68193828b559e..5f02b1032888f53eb20b3ee28cb123df4cdc0c45 100644 --- a/source/anim/AnimatedModelShared.cpp +++ b/source/anim/AnimatedModelShared.cpp @@ -536,6 +536,8 @@ bool CAnimatedModelShared::init(UINT uResourceCount, IXResourceModelAnimated **p if(m_pDevice) { + bool useDelayedInit = false; + m_ppRenderBuffer = new IGXRenderBuffer*[m_uLodCount]; m_ppIndexBuffer = new IGXIndexBuffer*[m_uLodCount]; @@ -558,10 +560,13 @@ bool CAnimatedModelShared::init(UINT uResourceCount, IXResourceModelAnimated **p m_puTempTotalIndices[i] = aLodIndexCount[i]; m_puTempTotalVertices[i] = aLodVertexCount[i]; - m_pProvider->scheduleSharedGPUinit(this); + useDelayedInit = true; } + } - + if(useDelayedInit) + { + m_pProvider->scheduleSharedGPUinit(this); } } diff --git a/source/render/RenderPipeline.cpp b/source/render/RenderPipeline.cpp index 30bbfdd1dc85cde1b8e4c8b3066e931a2c3349da..d64a070ba51315f609299f82b1f44d70c9267b3a 100644 --- a/source/render/RenderPipeline.cpp +++ b/source/render/RenderPipeline.cpp @@ -1527,8 +1527,13 @@ void CRenderPipeline::renderPostprocessFinal() m_pMaterialSystem->bindRenderPass(m_pRenderPassPostprocess); } -void CRenderPipeline::renderEditor2D() +void CRenderPipeline::renderEditor2D(IXRenderableVisibility *pVisibility) { + if(!pVisibility) + { + pVisibility = m_pMainCameraVisibility; + } + SMMATRIX mVP; Core_RMatrixGet(G_RI_MATRIX_VIEWPROJ, &mVP); float3 vCamPos; @@ -1542,7 +1547,7 @@ void CRenderPipeline::renderEditor2D() m_pDevice->getThreadContext()->setPSConstant(m_pCameraShaderData, SCR_OBSERVER_CAMERA); m_pDevice->getThreadContext()->setGSConstant(m_pCameraShaderData, SCR_OBSERVER_CAMERA); - renderStage(XRS_EDITOR_2D); + renderStage(XRS_EDITOR_2D, pVisibility); } IXUI* CRenderPipeline::getXUI() diff --git a/source/render/RenderPipeline.h b/source/render/RenderPipeline.h index b1d4480feae105df05deed02ea54432b74fc69fa..090e4ea1eb082dd96d7d23cdc43acea1af090b88 100644 --- a/source/render/RenderPipeline.h +++ b/source/render/RenderPipeline.h @@ -40,7 +40,7 @@ protected: void renderPostprocessMain() override; void renderTransparent() override; void renderPostprocessFinal() override; - void renderEditor2D() override; + void renderEditor2D(IXRenderableVisibility *pVisibility = NULL) override; protected: UINT getIndexForStage(X_RENDER_STAGE stage); diff --git a/source/terrax/terrax.cpp b/source/terrax/terrax.cpp index 88eca8c7a7a4a96170b96d477e33422db4dc64f5..4f2fe39c99ad29a354f2500ebed4268c60f2d138 100644 --- a/source/terrax/terrax.cpp +++ b/source/terrax/terrax.cpp @@ -19,6 +19,7 @@ See the license in LICENSE #include <xcommon/editor/IXEditorObject.h> #include <xcommon/editor/IXEditable.h> +#include <xcommon/IXRenderable.h> #include <mtrl/IXMaterialSystem.h> #include "UndoManager.h" #include "Tools.h" @@ -257,9 +258,20 @@ public: //m_pRenderPassGeometry2D = m_pMaterialSystem->getRenderPass("xGBuffer"); m_pRenderPassGeometry2D = m_pMaterialSystem->registerRenderPass("xEditor2D", "terrax/geom2d.ps", NULL, NULL, NULL, NULL, true); } + + m_pCameraVisibility[0] = NULL; + for(UINT i = 0; i < 3; ++i) + { + newVisData(&m_pCameraVisibility[i + 1]); + } } ~CRenderPipeline() { + for(UINT i = 0; i < 3; ++i) + { + mem_release(m_pCameraVisibility[i + 1]); + } + m_pCore->setRenderPipeline(m_pOldPipeline); mem_release(m_pOldPipeline); } @@ -288,6 +300,9 @@ public: ICamera **pCameras = g_xConfig.m_pViewportCamera + 1; float *fScales = g_xConfig.m_fViewportScale + 1; X_2D_VIEW *views = g_xConfig.m_x2DView + 1; + IXRenderableVisibility **pCameraVisibility = m_pCameraVisibility + 1; + + //[i + 1] //ICamera *p3DCamera = SRender_GetCamera(); pDXDevice->setSamplerState(NULL, 0); //############################################################################# @@ -319,6 +334,8 @@ public: Core_RMatrixSet(G_RI_MATRIX_PROJECTION, &mProj); Core_RMatrixSet(G_RI_MATRIX_VIEWPROJ, &(mView * mProj)); + pCameras[i]->updateFrustum(&mProj); + g_pCameraConstantBuffer->update(&SMMatrixIdentity); pDXDevice->setVSConstant(g_pCameraConstantBuffer, SCR_OBJECT); @@ -327,7 +344,7 @@ public: XRender2D(views[i], fScales[i], true); - renderEditor2D(); + renderEditor2D(pCameraVisibility[i]); Core_RIntSet(G_RI_INT_RENDERSTATE, RENDER_STATE_MATERIAL); pDXDevice->setVSConstant(g_pCameraConstantBuffer, SCR_OBJECT); @@ -366,6 +383,11 @@ public: void updateVisibility() override { m_pOldPipeline->updateVisibility(); + + for(UINT i = 0; i < 3; ++i) + { + m_pCameraVisibility[i + 1]->updateForCamera(g_xConfig.m_pViewportCamera[i + 1]); + } } void renderStage(X_RENDER_STAGE stage, IXRenderableVisibility *pVisibility = NULL) override @@ -413,9 +435,9 @@ public: { m_pOldPipeline->renderPostprocessFinal(); } - void renderEditor2D() override + void renderEditor2D(IXRenderableVisibility *pVisibility) override { - m_pOldPipeline->renderEditor2D(); + m_pOldPipeline->renderEditor2D(pVisibility); } IXCore *m_pCore; @@ -423,6 +445,8 @@ public: IXMaterialSystem *m_pMaterialSystem = NULL; XRenderPassHandler *m_pRenderPassGeometry2D = NULL; + + IXRenderableVisibility *m_pCameraVisibility[4]; }; #if defined(_WINDOWS) diff --git a/source/xSound/SoundLayer.cpp b/source/xSound/SoundLayer.cpp index 7f8e4fffafef3658d142720cc3762da87188b623..5618ccab209b1f6d61683795defe7cdad1d804d1 100644 --- a/source/xSound/SoundLayer.cpp +++ b/source/xSound/SoundLayer.cpp @@ -12,25 +12,25 @@ CSoundLayer::~CSoundLayer() if (m_pParent) m_pParent->delLayer(this); - for (maplayer::Iterator i = m_mapLayers.begin(); i; i++) + for(maplayer::Iterator i = m_mapLayers.begin(); i; ++i) { mem_release(m_mapLayers[i.first]); m_mapLayers.erase(i.first); } - for (MapPlayer::Iterator i = m_mapSndPlayers.begin(); i; i++) + for(MapPlayer::Iterator i = m_mapSndPlayers.begin(); i; ++i) { /*mem_release(m_mapSndPlayers[i.first]); m_mapSndPlayers.erase(i.first);*/ ArrayPlayer *oAP = i.second; - for (int k = 0, kl = oAP->size(); k < kl; ++k) + for(int k = 0, kl = oAP->size(); k < kl; ++k) { mem_release(oAP->get(k)); } } m_mapSndPlayers.clear(); - for (MapEmitter::Iterator i = m_mapSndEmitters.begin(); i; i++) + for (MapEmitter::Iterator i = m_mapSndEmitters.begin(); i; ++i) { /*mem_release(m_mapSndEmitters[i.first]); m_mapSndEmitters.erase(i.first);*/ @@ -81,9 +81,9 @@ void CSoundLayer::addLayer(CSoundLayer *pLayer, const char *szName) void CSoundLayer::delLayer(const CSoundLayer *pLayer) { - for (maplayer::Iterator i = m_mapLayers.begin(); i; i++) + for(maplayer::Iterator i = m_mapLayers.begin(); i; ++i) { - if (m_mapLayers[i.first] == pLayer) + if(m_mapLayers[i.first] == pLayer) { m_mapLayers.erase(i.first); break; @@ -113,7 +113,7 @@ void CSoundLayer::delSndPlayer(const CSoundPlayer *pSndPlayer) } } - /*for (MapPlayer::Iterator i = m_mapSndPlayers.begin(); i; i++) + /*for (MapPlayer::Iterator i = m_mapSndPlayers.begin(); i; ++i) { if (m_mapSndPlayers[i.first] == pSndPlayer) { @@ -145,7 +145,7 @@ void CSoundLayer::delSndEmitter(const CSoundEmitter *pSndEmitter) m_mapSndEmitters[szName].erase(i); } } - /*for (MapPlayer::Iterator i = m_mapSndEmitters.begin(); i; i++) + /*for (MapPlayer::Iterator i = m_mapSndEmitters.begin(); i; ++i) { if (m_mapSndEmitters[i.first] == pSndEmitter) { @@ -185,9 +185,9 @@ IXSoundLayer* XMETHODCALLTYPE CSoundLayer::findLayer(const char *szName) IXSoundLayer *pFound = NULL; - for (maplayer::Iterator i = m_mapLayers.begin(); i; i++) + for(maplayer::Iterator i = m_mapLayers.begin(); i; ++i) { - if ((pFound = m_mapLayers[i.first]->findLayer(szName))) + if((pFound = m_mapLayers[i.first]->findLayer(szName))) break; } @@ -294,27 +294,27 @@ void XMETHODCALLTYPE CSoundLayer::play(bool canPlay) m_isPlaying = canPlay; - for (maplayer::Iterator i = m_mapLayers.begin(); i; i++) + for(maplayer::Iterator i = m_mapLayers.begin(); i; ++i) m_mapLayers[i.first]->play(canPlay); - for (MapPlayer::Iterator i = m_mapSndPlayers.begin(); i; i++) + for(MapPlayer::Iterator i = m_mapSndPlayers.begin(); i; ++i) { /*if (canPlay) m_mapSndPlayers[i.first]->resume(); - else + else m_mapSndPlayers[i.first]->pause();*/ ArrayPlayer *oAP = i.second; - for (int k = 0, kl = oAP->size(); k < kl; ++k) + for(int k = 0, kl = oAP->size(); k < kl; ++k) { - if (canPlay) + if(canPlay) oAP->get(k)->resume(); else oAP->get(k)->pause(); } } - for (MapEmitter::Iterator i = m_mapSndEmitters.begin(); i; i++) + for (MapEmitter::Iterator i = m_mapSndEmitters.begin(); i; ++i) { /*if (canPlay) m_mapSndEmitters[i.first]->resume(); @@ -341,29 +341,29 @@ bool XMETHODCALLTYPE CSoundLayer::isPlaying() const void CSoundLayer::update(const float3 &vListenerPos, const float3 &vListenerDir, const float3 &vListenerUp) { - for (maplayer::Iterator i = m_mapLayers.begin(); i; i++) + for(maplayer::Iterator i = m_mapLayers.begin(); i; ++i) { - if (m_mapLayers[i.first]) + if(m_mapLayers[i.first]) m_mapLayers[i.first]->update(vListenerPos, vListenerDir, vListenerUp); } - for (MapPlayer::Iterator i = m_mapSndPlayers.begin(); i; i++) + for(MapPlayer::Iterator i = m_mapSndPlayers.begin(); i; ++i) { /*if (m_mapSndPlayers[i.first]) m_mapSndPlayers[i.first]->update(vListenerPos, vListenerDir, vListenerUp);*/ ArrayPlayer *oAP = i.second; - for (int k = 0, kl = oAP->size(); k < kl; ++k) + for(int k = 0, kl = oAP->size(); k < kl; ++k) oAP->get(k)->update(vListenerPos, vListenerDir, vListenerUp); } - for (MapEmitter::Iterator i = m_mapSndEmitters.begin(); i; i++) + for(MapEmitter::Iterator i = m_mapSndEmitters.begin(); i; ++i) { /*if (m_mapSndEmitters[i.first]) m_mapSndEmitters[i.first]->update(vListenerPos, vListenerDir, vListenerUp);*/ ArrayEmitter *oAE = i.second; - for (int k = 0, kl = oAE->size(); k < kl; ++k) + for(int k = 0, kl = oAE->size(); k < kl; ++k) oAE->get(k)->update(vListenerPos, vListenerDir, vListenerUp); } } diff --git a/source/xSound/SoundSystem.cpp b/source/xSound/SoundSystem.cpp index 7109a7ce15a4cd4ce9788905557b132c430b1acd..87c83c36caadb4027f6c83076c7065922c95c279 100644 --- a/source/xSound/SoundSystem.cpp +++ b/source/xSound/SoundSystem.cpp @@ -110,9 +110,9 @@ IXAudioCodecTarget* CSoundSystem::getCodecTarget(const char *szName) IXAudioCodecTarget *pTarget = NULL; IXAudioCodecTarget *pTarget2 = NULL; - for (mapcodec::Iterator i = m_mapCodecs.begin(); i != m_mapCodecs.end(); i++) + for(mapcodec::Iterator i = m_mapCodecs.begin(); i; ++i) { - if (m_mapCodecs[i.first]->open(szPath, "", &pTarget, false)) + if(m_mapCodecs[i.first]->open(szPath, "", &pTarget, false)) { pCodec = m_mapCodecs[i.first]; break; @@ -283,7 +283,7 @@ IXSoundLayer* XMETHODCALLTYPE CSoundSystem::findLayer(const char *szName) IXAudioCodec* CSoundSystem::getCodecSave() { - for (mapcodec::Iterator i = m_mapCodecs.begin(); i != m_mapCodecs.end(); i++) + for (mapcodec::Iterator i = m_mapCodecs.begin(); i; ++i) { if (m_mapCodecs[i.first]->canSave()) return m_mapCodecs[i.first]; diff --git a/source/xcommon/IXRenderPipeline.h b/source/xcommon/IXRenderPipeline.h index 0f73383fba4be1d1ad0eef3dcce0fd54d06535c5..070298a47c4fb7b6e80071043c42f14d424f7b5b 100644 --- a/source/xcommon/IXRenderPipeline.h +++ b/source/xcommon/IXRenderPipeline.h @@ -43,7 +43,7 @@ public: virtual void renderPostprocessMain() = 0; virtual void renderTransparent() = 0; virtual void renderPostprocessFinal() = 0; - virtual void renderEditor2D() = 0; + virtual void renderEditor2D(IXRenderableVisibility *pVisibility = NULL) = 0; }; #endif