Files
WickedEngine/WickedEngine/wiDepthTarget.cpp
T
2016-03-20 00:37:03 +01:00

141 lines
5.2 KiB
C++

#include "wiDepthTarget.h"
#include "wiRenderer.h"
wiDepthTarget::wiDepthTarget()
{
//texture2D = NULL;
//depthTarget = NULL;
//shaderResource = NULL;
texture = nullptr;
textureCube = nullptr;
isCube = false;
}
wiDepthTarget::~wiDepthTarget()
{
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;
ZeroMemory(&depthBufferDesc, sizeof(depthBufferDesc));
// Set up the description of the depth buffer.
depthBufferDesc.Width = width;
depthBufferDesc.Height = height;
depthBufferDesc.MipLevels = 1;
depthBufferDesc.ArraySize = 1;
depthBufferDesc.Format = DXGI_FORMAT_R24G8_TYPELESS;
depthBufferDesc.SampleDesc.Count = MSAAC;
depthBufferDesc.SampleDesc.Quality = MSAAQ;
depthBufferDesc.Usage = USAGE_DEFAULT;
depthBufferDesc.BindFlags = BIND_DEPTH_STENCIL | BIND_SHADER_RESOURCE;
depthBufferDesc.CPUAccessFlags = 0;
depthBufferDesc.MiscFlags = 0;
wiRenderer::graphicsDevice->CreateTexture2D(&depthBufferDesc, nullptr, &texture);
//HRESULT hr;
//// Create the texture for the depth buffer using the filled out description.
//hr=wiRenderer::graphicsDevice->CreateTexture2D(&depthBufferDesc, nullptr, &texture2D);
//DepthStencilViewDesc depthStencilViewDesc;
//ZeroMemory(&depthStencilViewDesc, sizeof(depthStencilViewDesc));
//depthStencilViewDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
//depthStencilViewDesc.ViewDimension = (MSAAQ==0 ? RESOURCE_DIMENSION_TEXTURE2D : RESOURCE_DIMENSION_TEXTURE2DMS);
////depthStencilViewDesc.Texture2D.MipSlice = 0;
//depthStencilViewDesc.Flags = 0;
//// Create the depth stencil view.
//hr=wiRenderer::graphicsDevice->CreateDepthStencilView(texture2D, &depthStencilViewDesc, &depthTarget);
////Create Depth ShaderResource
////ShaderResourceViewDesc shaderResourceViewDesc;
//ZeroMemory(&shaderResourceViewDesc, sizeof(shaderResourceViewDesc));
//shaderResourceViewDesc.Format = DXGI_FORMAT_R24_UNORM_X8_TYPELESS;
//shaderResourceViewDesc.ViewDimension = (MSAAQ==0 ? RESOURCE_DIMENSION_TEXTURE2D : RESOURCE_DIMENSION_TEXTURE2DMS);
////shaderResourceViewDesc.Texture2D.MostDetailedMip = 0;
////shaderResourceViewDesc.Texture2D.MipLevels = 1;
//shaderResourceViewDesc.mipLevels = 1;
//wiRenderer::graphicsDevice->CreateShaderResourceView(texture2D, &shaderResourceViewDesc, &shaderResource);
}
void wiDepthTarget::InitializeCube(int size)
{
SAFE_DELETE(texture);
SAFE_DELETE(textureCube);
isCube = true;
Texture2DDesc depthBufferDesc;
ZeroMemory(&depthBufferDesc, sizeof(depthBufferDesc));
// Set up the description of the depth buffer.
depthBufferDesc.Width = size;
depthBufferDesc.Height = size;
depthBufferDesc.MipLevels = 1;
depthBufferDesc.ArraySize = 6;
depthBufferDesc.Format = DXGI_FORMAT_R32_TYPELESS;
depthBufferDesc.SampleDesc.Count = 1;
depthBufferDesc.SampleDesc.Quality = 0;
depthBufferDesc.Usage = USAGE_DEFAULT;
depthBufferDesc.BindFlags = BIND_DEPTH_STENCIL | BIND_SHADER_RESOURCE;
depthBufferDesc.CPUAccessFlags = 0;
depthBufferDesc.MiscFlags = RESOURCE_MISC_TEXTURECUBE;
wiRenderer::graphicsDevice->CreateTextureCube(&depthBufferDesc, nullptr, &textureCube);
//HRESULT hr;
//// Create the texture for the depth buffer using the filled out description.
//hr=wiRenderer::graphicsDevice->CreateTexture2D(&depthBufferDesc, NULL, &texture2D);
//DepthStencilViewDesc depthStencilViewDesc;
//ZeroMemory(&depthStencilViewDesc, sizeof(depthStencilViewDesc));
//depthStencilViewDesc.Format = DXGI_FORMAT_D32_FLOAT;
//depthStencilViewDesc.ViewDimension = RESOURCE_DIMENSION_TEXTURE2DARRAY;
//// depthStencilViewDesc.Texture2DArray.FirstArraySlice = 0;
////depthStencilViewDesc.Texture2DArray.ArraySize = 6;
//// depthStencilViewDesc.Texture2DArray.MipSlice = 0;
//depthStencilViewDesc.ArraySize = 6;
//depthStencilViewDesc.Flags = 0;
//// Create the depth stencil view.
//hr=wiRenderer::graphicsDevice->CreateDepthStencilView(texture2D, &depthStencilViewDesc, &depthTarget);
////Create Depth ShaderResource
////ShaderResourceViewDesc shaderResourceViewDesc;
//ZeroMemory(&shaderResourceViewDesc, sizeof(shaderResourceViewDesc));
//shaderResourceViewDesc.Format = DXGI_FORMAT_R32_FLOAT;
//shaderResourceViewDesc.ViewDimension = RESOURCE_DIMENSION_TEXTURECUBE;
////shaderResourceViewDesc.Texture2D.MostDetailedMip = 0;
////shaderResourceViewDesc.Texture2D.MipLevels = 1;
//shaderResourceViewDesc.mipLevels = 1;
//wiRenderer::graphicsDevice->CreateShaderResourceView(texture2D, &shaderResourceViewDesc, &shaderResource);
}
void wiDepthTarget::Clear(GRAPHICSTHREAD threadID)
{
wiRenderer::graphicsDevice->ClearDepthStencil(GetTexture(), CLEAR_DEPTH | CLEAR_STENCIL, 1.0f, 0);
}
void wiDepthTarget::CopyFrom(const wiDepthTarget& from, GRAPHICSTHREAD threadID)
{
//if(shaderResource) shaderResource->Release();
////static ShaderResourceViewDesc desc;
////from.shaderResource->GetDesc(&desc);
//wiRenderer::graphicsDevice->CopyResource(texture2D,from.texture2D);
//HRESULT r = wiRenderer::graphicsDevice->CreateShaderResourceView(texture2D,&from.shaderResourceViewDesc,&shaderResource);
wiRenderer::graphicsDevice->CopyTexture2D(GetTexture(), from.GetTexture(), threadID);
}