From 655d709cebfa26d9e5ae07e8993658d07e115bc6 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Thu, 31 Jul 2014 18:25:50 +0200 Subject: [PATCH] Render target format (for alpha) --- code/nel/include/nel/3d/render_target_manager.h | 4 ++-- code/nel/src/3d/render_target_manager.cpp | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/code/nel/include/nel/3d/render_target_manager.h b/code/nel/include/nel/3d/render_target_manager.h index 9203a5f3d..cae8e31b0 100644 --- a/code/nel/include/nel/3d/render_target_manager.h +++ b/code/nel/include/nel/3d/render_target_manager.h @@ -36,7 +36,7 @@ #include // Project includes -// ... +#include namespace NL3D { @@ -64,7 +64,7 @@ public: CRenderTargetManager(); ~CRenderTargetManager(); - NL3D::CTextureUser *getRenderTarget(uint width, uint height, bool mode2D = false); + NL3D::CTextureUser *getRenderTarget(uint width, uint height, bool mode2D = false, UTexture::TUploadFormat format = UTexture::Auto); void recycleRenderTarget(NL3D::CTextureUser *renderTarget); void cleanup(); diff --git a/code/nel/src/3d/render_target_manager.cpp b/code/nel/src/3d/render_target_manager.cpp index ba6172ac6..0c4daa507 100644 --- a/code/nel/src/3d/render_target_manager.cpp +++ b/code/nel/src/3d/render_target_manager.cpp @@ -51,9 +51,13 @@ namespace NL3D { struct CRenderTargetDescInt { public: + // Options uint Width; uint Height; bool Mode2D; + UTexture::TUploadFormat Format; + + // Data NL3D::CTextureUser *TextureUser; NLMISC::CSmartPtr TextureInterface; bool InUse; @@ -72,13 +76,13 @@ CRenderTargetManager::~CRenderTargetManager() cleanup(); } -NL3D::CTextureUser *CRenderTargetManager::getRenderTarget(uint width, uint height, bool mode2D) +NL3D::CTextureUser *CRenderTargetManager::getRenderTarget(uint width, uint height, bool mode2D, UTexture::TUploadFormat format) { // Find or create a render target, short loop so no real optimization for (std::vector::iterator it(m_RenderTargets.begin()), end(m_RenderTargets.end()); it != end; ++it) { CRenderTargetDescInt *desc = *it; - if (!desc->InUse && desc->Width == width && desc->Height == height && desc->Mode2D == mode2D) + if (!desc->InUse && desc->Width == width && desc->Height == height && desc->Mode2D == mode2D && desc->Format == format) { desc->InUse = true; desc->Used = true; @@ -94,6 +98,7 @@ NL3D::CTextureUser *CRenderTargetManager::getRenderTarget(uint width, uint heigh desc->TextureInterface = tex; desc->TextureInterface->setRenderTarget(true); desc->TextureInterface->setReleasable(false); + desc->TextureInterface->setUploadFormat((ITexture::TUploadFormat)(uint32)format); desc->TextureInterface->resize(width, height); desc->TextureInterface->setFilterMode(ITexture::Linear, ITexture::LinearMipMapOff); desc->TextureInterface->setWrapS(ITexture::Clamp); @@ -104,6 +109,7 @@ NL3D::CTextureUser *CRenderTargetManager::getRenderTarget(uint width, uint heigh desc->Width = width; desc->Height = height; desc->Mode2D = mode2D; + desc->Format = format; desc->Used = true; desc->InUse = true; m_RenderTargets.push_back(desc);