Graphics API decouple part3

This commit is contained in:
turanszkij
2016-03-20 00:37:03 +01:00
parent 402d7422ee
commit 00dda0bbdb
7 changed files with 43 additions and 47 deletions
+2 -2
View File
@@ -284,7 +284,7 @@ void Renderable3DComponent::RenderSecondaryScene(wiRenderTarget& mainRT, wiRende
wiRenderer::DrawWaterRipples(threadID);
}
//wiRenderer::UnbindTextures(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
wiRenderer::graphicsDevice->UnbindTextures(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
rtTransparent.Activate(threadID, mainRT.depth); {
wiRenderer::DrawWorldTransparent(wiRenderer::getCamera(), shadedSceneRT.GetTexture(), rtReflection.GetTexture()
, rtWaterRipple.GetTexture(), threadID);
@@ -352,7 +352,7 @@ void Renderable3DComponent::RenderLightShafts(wiRenderTarget& mainRT, GRAPHICSTH
wiImageEffects fx((float)wiRenderer::GetScreenWidth(), (float)wiRenderer::GetScreenHeight());
//wiRenderer::UnbindTextures(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
wiRenderer::graphicsDevice->UnbindTextures(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
rtSun[0].Activate(threadID, mainRT.depth); {
wiRenderer::DrawSun(threadID);
}
+9 -4
View File
@@ -8,20 +8,22 @@ wiDepthTarget::wiDepthTarget()
//depthTarget = NULL;
//shaderResource = NULL;
texture = nullptr;
textureCube = nullptr;
isCube = false;
}
wiDepthTarget::~wiDepthTarget()
{
//if(texture2D) texture2D->Release(); texture2D = NULL;
//if(depthTarget) depthTarget->Release(); depthTarget = NULL;
//if(shaderResource) shaderResource->Release(); shaderResource = NULL;
SAFE_DELETE(texture);
SAFE_DELETE(textureCube);
}
void wiDepthTarget::Initialize(int width, int height, UINT MSAAC, UINT MSAAQ)
{
SAFE_DELETE(texture);
SAFE_DELETE(textureCube);
isCube = false;
Texture2DDesc depthBufferDesc;
@@ -69,6 +71,9 @@ void wiDepthTarget::Initialize(int width, int height, UINT MSAAC, UINT MSAAQ)
}
void wiDepthTarget::InitializeCube(int size)
{
SAFE_DELETE(texture);
SAFE_DELETE(textureCube);
isCube = true;
Texture2DDesc depthBufferDesc;
@@ -120,7 +125,7 @@ void wiDepthTarget::InitializeCube(int size)
void wiDepthTarget::Clear(GRAPHICSTHREAD threadID)
{
wiRenderer::graphicsDevice->ClearDepthStencil( texture, CLEAR_DEPTH | CLEAR_STENCIL, 1.0f, 0);
wiRenderer::graphicsDevice->ClearDepthStencil(GetTexture(), CLEAR_DEPTH | CLEAR_STENCIL, 1.0f, 0);
}
void wiDepthTarget::CopyFrom(const wiDepthTarget& from, GRAPHICSTHREAD threadID)
{
+1
View File
@@ -25,5 +25,6 @@ public:
void CopyFrom(const wiDepthTarget&, GRAPHICSTHREAD threadID);
Texture2D* GetTexture() const { return(isCube ? textureCube : texture); }
Texture2DDesc GetDesc() const { return GetTexture()->desc; }
};
+14 -18
View File
@@ -278,15 +278,9 @@ HRESULT GraphicsDevice_DX11::CreateTexture2D(const Texture2DDesc* pDesc, const S
if (FAILED(hr))
return hr;
hr = CreateRenderTargetView(*ppTexture2D);
if (FAILED(hr))
return hr;
hr = CreateShaderResourceView(*ppTexture2D);
if (FAILED(hr))
return hr;
hr = CreateDepthStencilView(*ppTexture2D);
if (FAILED(hr))
return hr;
CreateRenderTargetView(*ppTexture2D);
CreateShaderResourceView(*ppTexture2D);
CreateDepthStencilView(*ppTexture2D);
return hr;
}
@@ -315,15 +309,9 @@ HRESULT GraphicsDevice_DX11::CreateTextureCube(const Texture2DDesc* pDesc, const
if (FAILED(hr))
return hr;
hr = CreateRenderTargetView(*ppTextureCube);
if (FAILED(hr))
return hr;
hr = CreateShaderResourceView(*ppTextureCube);
if (FAILED(hr))
return hr;
hr = CreateDepthStencilView(*ppTextureCube);
if (FAILED(hr))
return hr;
CreateRenderTargetView(*ppTextureCube);
CreateShaderResourceView(*ppTextureCube);
CreateDepthStencilView(*ppTextureCube);
return hr;
}
@@ -336,6 +324,10 @@ HRESULT GraphicsDevice_DX11::CreateShaderResourceView(Texture2D* pTexture)
if (pTexture->desc.MiscFlags & RESOURCE_MISC_TEXTURECUBE)
{
shaderResourceViewDesc.Format = pTexture->desc.Format;
if (pTexture->desc.BindFlags & D3D11_BIND_DEPTH_STENCIL)
{
shaderResourceViewDesc.Format = DXGI_FORMAT_R32_FLOAT;
}
shaderResourceViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
shaderResourceViewDesc.TextureCube.MostDetailedMip = 0; //from most detailed...
shaderResourceViewDesc.TextureCube.MipLevels = -1; //...to least detailed
@@ -343,6 +335,10 @@ HRESULT GraphicsDevice_DX11::CreateShaderResourceView(Texture2D* pTexture)
else
{
shaderResourceViewDesc.Format = pTexture->desc.Format;
if (pTexture->desc.BindFlags & D3D11_BIND_DEPTH_STENCIL)
{
shaderResourceViewDesc.Format = DXGI_FORMAT_R24_UNORM_X8_TYPELESS;
}
shaderResourceViewDesc.ViewDimension = (pTexture->desc.SampleDesc.Quality == 0 ? D3D11_SRV_DIMENSION_TEXTURE2D : D3D11_SRV_DIMENSION_TEXTURE2DMS);
shaderResourceViewDesc.Texture2D.MostDetailedMip = 0; //from most detailed...
shaderResourceViewDesc.Texture2D.MipLevels = -1; //...to least detailed
+14 -20
View File
@@ -3,38 +3,28 @@
#include "wiDepthTarget.h"
void wiRenderTarget::clear(){
//textureDesc = { 0 };
numViews = 0;
viewPort = ViewPort();
depth = nullptr;
//retargetted = false;
isCube = false;
}
wiRenderTarget::wiRenderTarget()
{
clear();
numViews = 0;
depth = nullptr;
isCube = false;
}
wiRenderTarget::wiRenderTarget(UINT width, UINT height, int numViews, bool hasDepth, UINT MSAAC, UINT MSAAQ
, DXGI_FORMAT format, UINT mipMapLevelCount)
{
clear();
numViews = 0;
depth = nullptr;
isCube = false;
Initialize(width, height, numViews, hasDepth, MSAAC, MSAAQ, format, mipMapLevelCount);
}
wiRenderTarget::~wiRenderTarget()
{
//for(int i=0;i<numViews;++i){
// if(texture2D[i]) texture2D[i]->Release(); texture2D[i] = NULL;
// if(renderTarget[i]) renderTarget[i]->Release(); renderTarget[i] = NULL;
// if(SAVEDshaderResource[i]) SAVEDshaderResource[i]->Release(); SAVEDshaderResource[i]=NULL;
// if(shaderResource[i] && !retargetted) shaderResource[i]->Release(); shaderResource[i] = NULL;
//}
//texture2D.clear();
//renderTarget.clear();
//shaderResource.clear();
clear();
}
void wiRenderTarget::clear() {
for (unsigned int i = 0; i < renderTargets.size(); ++i)
{
SAFE_DELETE(renderTargets[i]);
@@ -49,6 +39,8 @@ wiRenderTarget::~wiRenderTarget()
void wiRenderTarget::Initialize(UINT width, UINT height, int numViews, bool hasDepth, UINT MSAAC, UINT MSAAQ
, DXGI_FORMAT format, UINT mipMapLevelCount)
{
clear();
isCube = false;
this->numViews = numViews;
@@ -113,6 +105,8 @@ void wiRenderTarget::Initialize(UINT width, UINT height, int numViews, bool hasD
}
void wiRenderTarget::InitializeCube(UINT size, int numViews, bool hasDepth, DXGI_FORMAT format, UINT mipMapLevelCount)
{
clear();
isCube = true;
this->numViews = numViews;
+2 -1
View File
@@ -40,7 +40,8 @@ public:
//void Restore();
Texture2D* GetTexture(int viewID = 0) const{ return (isCube ? renderTargets_Cube[viewID] : renderTargets[viewID]); }
Texture2DDesc GetDesc(int viewID = 0) const{ return GetTexture(viewID)->desc; }
Texture2DDesc GetDesc(int viewID = 0) const { assert(viewID < numViews); return GetTexture(viewID)->desc; }
UINT GetMipCount();
bool IsInitialized() { return (numViews > 0 || depth != nullptr); }
};
+1 -2
View File
@@ -1988,8 +1988,7 @@ void wiRenderer::DrawForShadowMap(GRAPHICSTHREAD threadID)
CulledList culledObjects;
CulledCollection culledRenderer;
auto texDesc = l->shadowMaps_dirLight[index].GetDesc();
if (texDesc.Height != SHADOWMAPRES)
if (!l->shadowMaps_dirLight[index].IsInitialized() || l->shadowMaps_dirLight[index].depth->GetDesc().Height != SHADOWMAPRES)
{
// Create the shadow map
l->shadowMaps_dirLight[index].Initialize(SHADOWMAPRES, SHADOWMAPRES, 0, true);