3D: Render target matrix context fix

--HG--
branch : multipass-stereo
This commit is contained in:
kaetemi 2014-08-05 02:21:30 +02:00
parent 33235bdf6c
commit 339c8b8dfa
5 changed files with 15 additions and 13 deletions

View file

@ -251,7 +251,7 @@ public:
virtual CRenderTargetManager &getRenderTargetManager() { return _RenderTargetManager; } virtual CRenderTargetManager &getRenderTargetManager() { return _RenderTargetManager; }
/// Set a texture the size of the window as render target /// Set a texture the size of the window as render target
virtual void beginDefaultRenderTarget(); virtual void beginDefaultRenderTarget(uint32 width = 0, uint32 height = 0);
/// Draw the render target to the back buffer /// Draw the render target to the back buffer
virtual void endDefaultRenderTarget(UScene *scene); virtual void endDefaultRenderTarget(UScene *scene);

View file

@ -310,8 +310,8 @@ public:
/// Get the render target manager /// Get the render target manager
virtual CRenderTargetManager &getRenderTargetManager() =0; virtual CRenderTargetManager &getRenderTargetManager() =0;
/// Set a texture the size of the window as render target /// Set a texture of specified size or of the size of the window as render target
virtual void beginDefaultRenderTarget() =0; virtual void beginDefaultRenderTarget(uint32 width = 0, uint32 height = 0) =0;
/// Draw the render target to the back buffer /// Draw the render target to the back buffer
virtual void endDefaultRenderTarget(UScene *scene) =0; virtual void endDefaultRenderTarget(UScene *scene) =0;

View file

@ -1077,7 +1077,7 @@ void CDriverGL::setupViewport (const class CViewport& viewport)
// Setup gl viewport // Setup gl viewport
uint32 clientWidth, clientHeight; uint32 clientWidth, clientHeight;
getWindowSize(clientWidth, clientHeight); getRenderTargetSize(clientWidth, clientHeight);
// Backup the viewport // Backup the viewport
_CurrViewport = viewport; _CurrViewport = viewport;
@ -1132,7 +1132,7 @@ void CDriverGL::setupScissor (const class CScissor& scissor)
// Setup gl viewport // Setup gl viewport
uint32 clientWidth, clientHeight; uint32 clientWidth, clientHeight;
getWindowSize(clientWidth, clientHeight); getRenderTargetSize(clientWidth, clientHeight);
// Backup the scissor // Backup the scissor
_CurrScissor= scissor; _CurrScissor= scissor;

View file

@ -1948,9 +1948,7 @@ bool CDriverUser::setRenderTarget(class UTexture & uTex, uint32 x, uint32 y, uin
bool result = _Driver->setRenderTarget(tex, x, y, width, height, mipmapLevel, cubeFace); bool result = _Driver->setRenderTarget(tex, x, y, width, height, mipmapLevel, cubeFace);
CViewport currentViewport; setupMatrixContext();
_Driver->getViewport(currentViewport);
setViewport(currentViewport);
return result; return result;
} }

View file

@ -75,7 +75,7 @@ void CDriverUser::deleteScene(UScene *scene)
// *************************************************************************** // ***************************************************************************
void CDriverUser::beginDefaultRenderTarget() void CDriverUser::beginDefaultRenderTarget(uint32 width, uint32 height)
{ {
if (_MatRenderTarget.empty()) if (_MatRenderTarget.empty())
{ {
@ -102,9 +102,9 @@ void CDriverUser::beginDefaultRenderTarget()
} }
nlassert(!_EffectRenderTarget); nlassert(!_EffectRenderTarget);
uint32 winw, winh; if (width == 0 || height == 0)
getWindowSize(winw, winh); getWindowSize(width, height);
_EffectRenderTarget = getRenderTargetManager().getRenderTarget(winw, winh); _EffectRenderTarget = getRenderTargetManager().getRenderTarget(width, height);
setRenderTarget(*_EffectRenderTarget); setRenderTarget(*_EffectRenderTarget);
} }
@ -123,12 +123,16 @@ void CDriverUser::endDefaultRenderTarget(UScene *scene)
if (scene) if (scene)
{ {
pCam = scene->getCam(); pCam = scene->getCam();
setMatrixMode2D11();
} }
CViewport oldVp = getViewport();
CViewport vp = CViewport();
setViewport(vp);
setMatrixMode2D11();
bool fog = fogEnabled(); bool fog = fogEnabled();
enableFog(false); enableFog(false);
drawQuad(_RenderTargetQuad, _MatRenderTarget); drawQuad(_RenderTargetQuad, _MatRenderTarget);
enableFog(fog); enableFog(fog);
setViewport(oldVp);
if (scene) if (scene)
{ {
setMatrixMode3D(pCam); setMatrixMode3D(pCam);