Graphics API decouple part3
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -25,5 +25,6 @@ public:
|
||||
void CopyFrom(const wiDepthTarget&, GRAPHICSTHREAD threadID);
|
||||
|
||||
Texture2D* GetTexture() const { return(isCube ? textureCube : texture); }
|
||||
Texture2DDesc GetDesc() const { return GetTexture()->desc; }
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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); }
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user