updated transparent pass temporal AA
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include "postProcessHF.hlsli"
|
||||
#include "reconstructPositionHF.hlsli"
|
||||
|
||||
float4 main(VertexToPixelPostProcess PSIn) : SV_TARGET
|
||||
{
|
||||
|
||||
@@ -869,15 +869,12 @@ inline D3D11_TEXTURE3D_DESC _ConvertTexture3DDesc(const Texture3DDesc* pDesc)
|
||||
|
||||
return desc;
|
||||
}
|
||||
inline D3D11_SUBRESOURCE_DATA* _ConvertSubresourceData(const SubresourceData* pInitialData)
|
||||
inline D3D11_SUBRESOURCE_DATA _ConvertSubresourceData(const SubresourceData& pInitialData)
|
||||
{
|
||||
if (pInitialData == nullptr)
|
||||
return nullptr;
|
||||
|
||||
D3D11_SUBRESOURCE_DATA* data = new D3D11_SUBRESOURCE_DATA;
|
||||
data->pSysMem = pInitialData->pSysMem;
|
||||
data->SysMemPitch = pInitialData->SysMemPitch;
|
||||
data->SysMemSlicePitch = pInitialData->SysMemSlicePitch;
|
||||
D3D11_SUBRESOURCE_DATA data;
|
||||
data.pSysMem = pInitialData.pSysMem;
|
||||
data.SysMemPitch = pInitialData.SysMemPitch;
|
||||
data.SysMemSlicePitch = pInitialData.SysMemSlicePitch;
|
||||
|
||||
return data;
|
||||
}
|
||||
@@ -1581,10 +1578,19 @@ HRESULT GraphicsDevice_DX11::CreateBuffer(const GPUBufferDesc *pDesc, const Subr
|
||||
desc.MiscFlags = _ParseResourceMiscFlags(pDesc->MiscFlags);
|
||||
desc.StructureByteStride = pDesc->StructureByteStride;
|
||||
|
||||
D3D11_SUBRESOURCE_DATA* data = _ConvertSubresourceData(pInitialData);
|
||||
D3D11_SUBRESOURCE_DATA* data = nullptr;
|
||||
if (pInitialData != nullptr)
|
||||
{
|
||||
data = new D3D11_SUBRESOURCE_DATA[1];
|
||||
for (UINT slice = 0; slice < 1; ++slice)
|
||||
{
|
||||
data[slice] = _ConvertSubresourceData(pInitialData[slice]);
|
||||
}
|
||||
}
|
||||
|
||||
ppBuffer->desc = *pDesc;
|
||||
HRESULT hr = device->CreateBuffer(&desc, data, &ppBuffer->resource_DX11);
|
||||
SAFE_DELETE_ARRAY(data);
|
||||
assert(SUCCEEDED(hr) && "GPUBuffer creation failed!");
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
@@ -1658,11 +1664,21 @@ HRESULT GraphicsDevice_DX11::CreateTexture1D(const Texture1DDesc* pDesc, const S
|
||||
(*ppTexture1D)->desc = *pDesc;
|
||||
|
||||
D3D11_TEXTURE1D_DESC desc = _ConvertTexture1DDesc(&(*ppTexture1D)->desc);
|
||||
D3D11_SUBRESOURCE_DATA* data = _ConvertSubresourceData(pInitialData);
|
||||
|
||||
D3D11_SUBRESOURCE_DATA* data = nullptr;
|
||||
if (pInitialData != nullptr)
|
||||
{
|
||||
data = new D3D11_SUBRESOURCE_DATA[pDesc->ArraySize];
|
||||
for (UINT slice = 0; slice < pDesc->ArraySize; ++slice)
|
||||
{
|
||||
data[slice] = _ConvertSubresourceData(pInitialData[slice]);
|
||||
}
|
||||
}
|
||||
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
hr = device->CreateTexture1D(&desc, data, &((*ppTexture1D)->texture1D_DX11));
|
||||
SAFE_DELETE_ARRAY(data);
|
||||
assert(SUCCEEDED(hr) && "Texture1D creation failed!");
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
@@ -1711,11 +1727,21 @@ HRESULT GraphicsDevice_DX11::CreateTexture2D(const Texture2DDesc* pDesc, const S
|
||||
}
|
||||
|
||||
D3D11_TEXTURE2D_DESC desc = _ConvertTexture2DDesc(&(*ppTexture2D)->desc);
|
||||
D3D11_SUBRESOURCE_DATA* data = _ConvertSubresourceData(pInitialData);
|
||||
|
||||
D3D11_SUBRESOURCE_DATA* data = nullptr;
|
||||
if (pInitialData != nullptr)
|
||||
{
|
||||
data = new D3D11_SUBRESOURCE_DATA[pDesc->ArraySize];
|
||||
for (UINT slice = 0; slice < pDesc->ArraySize; ++slice)
|
||||
{
|
||||
data[slice] = _ConvertSubresourceData(pInitialData[slice]);
|
||||
}
|
||||
}
|
||||
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
hr = device->CreateTexture2D(&desc, data, &((*ppTexture2D)->texture2D_DX11));
|
||||
SAFE_DELETE_ARRAY(data);
|
||||
assert(SUCCEEDED(hr) && "Texture2D creation failed!");
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
@@ -1772,11 +1798,21 @@ HRESULT GraphicsDevice_DX11::CreateTexture3D(const Texture3DDesc* pDesc, const S
|
||||
(*ppTexture3D)->desc = *pDesc;
|
||||
|
||||
D3D11_TEXTURE3D_DESC desc = _ConvertTexture3DDesc(&(*ppTexture3D)->desc);
|
||||
D3D11_SUBRESOURCE_DATA* data = _ConvertSubresourceData(pInitialData);
|
||||
|
||||
D3D11_SUBRESOURCE_DATA* data = nullptr;
|
||||
if (pInitialData != nullptr)
|
||||
{
|
||||
data = new D3D11_SUBRESOURCE_DATA[1];
|
||||
for (UINT slice = 0; slice < 1; ++slice)
|
||||
{
|
||||
data[slice] = _ConvertSubresourceData(pInitialData[slice]);
|
||||
}
|
||||
}
|
||||
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
hr = device->CreateTexture3D(&desc, data, &((*ppTexture3D)->texture3D_DX11));
|
||||
SAFE_DELETE_ARRAY(data);
|
||||
assert(SUCCEEDED(hr) && "Texture3D creation failed!");
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
@@ -3998,8 +3998,11 @@ void wiRenderer::DrawWorldTransparent(Camera* camera, SHADERTYPE shaderType, Tex
|
||||
|
||||
void wiRenderer::DrawSky(GRAPHICSTHREAD threadID)
|
||||
{
|
||||
if (enviroMap == nullptr)
|
||||
return;
|
||||
if (!GetTemporalAAEnabled()) // If temporal AA is enabled, we should render a velocity map anyway, so render a black sky as that is the default!
|
||||
{
|
||||
if (enviroMap == nullptr)
|
||||
return;
|
||||
}
|
||||
|
||||
GetDevice()->EventBegin("DrawSky", threadID);
|
||||
|
||||
@@ -4011,7 +4014,15 @@ void wiRenderer::DrawSky(GRAPHICSTHREAD threadID)
|
||||
GetDevice()->BindVS(vertexShaders[VSTYPE_SKY], threadID);
|
||||
GetDevice()->BindPS(pixelShaders[PSTYPE_SKY], threadID);
|
||||
|
||||
GetDevice()->BindResourcePS(enviroMap, TEXSLOT_ENV_GLOBAL, threadID);
|
||||
if (enviroMap != nullptr)
|
||||
{
|
||||
GetDevice()->BindResourcePS(enviroMap, TEXSLOT_ENV_GLOBAL, threadID);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If control gets here, it means we fill out only a velocity buffer on the background for temporal AA
|
||||
GetDevice()->BindResourcePS(wiTextureHelper::getInstance()->getBlackCubeMap(), TEXSLOT_ENV_GLOBAL, threadID);
|
||||
}
|
||||
|
||||
GetDevice()->BindVertexBuffer(nullptr,0,0,threadID);
|
||||
GetDevice()->BindVertexLayout(nullptr, threadID);
|
||||
|
||||
@@ -98,6 +98,68 @@ Texture2D* wiTextureHelper::wiTextureHelperInstance::getNormalMapDefault()
|
||||
return getColor(wiColor(127, 127, 255, 255));
|
||||
}
|
||||
|
||||
Texture2D* wiTextureHelper::wiTextureHelperInstance::getBlackCubeMap()
|
||||
{
|
||||
if (helperTextures[HELPERTEXTURE_BLACKCUBEMAP] != nullptr)
|
||||
{
|
||||
return helperTextures[HELPERTEXTURE_BLACKCUBEMAP];
|
||||
}
|
||||
|
||||
int width = 1;
|
||||
int height = 1;
|
||||
|
||||
struct vector4b
|
||||
{
|
||||
unsigned char r;
|
||||
unsigned char g;
|
||||
unsigned char b;
|
||||
unsigned char a;
|
||||
|
||||
vector4b(unsigned char r=0, unsigned char g=0, unsigned char b=0, unsigned char a=0) :r(r), g(g), b(b), a(a) {}
|
||||
};
|
||||
|
||||
Texture2DDesc texDesc;
|
||||
texDesc.Width = width;
|
||||
texDesc.Height = height;
|
||||
texDesc.MipLevels = 1;
|
||||
texDesc.ArraySize = 6;
|
||||
texDesc.Format = FORMAT_R8G8B8A8_UNORM;
|
||||
texDesc.CPUAccessFlags = 0;
|
||||
texDesc.SampleDesc.Count = 1;
|
||||
texDesc.SampleDesc.Quality = 0;
|
||||
texDesc.Usage = USAGE_DEFAULT;
|
||||
texDesc.BindFlags = BIND_SHADER_RESOURCE;
|
||||
texDesc.CPUAccessFlags = 0;
|
||||
texDesc.MiscFlags = RESOURCE_MISC_TEXTURECUBE;
|
||||
|
||||
SubresourceData pData[6];
|
||||
std::vector<vector4b> d[6]; // 6 images of type vector4b = 4 * unsigned char
|
||||
|
||||
for (int cubeMapFaceIndex = 0; cubeMapFaceIndex < 6; cubeMapFaceIndex++)
|
||||
{
|
||||
d[cubeMapFaceIndex].resize(width * height);
|
||||
|
||||
// fill with black color
|
||||
std::fill(
|
||||
d[cubeMapFaceIndex].begin(),
|
||||
d[cubeMapFaceIndex].end(),
|
||||
vector4b(0, 0, 0, 0));
|
||||
|
||||
pData[cubeMapFaceIndex].pSysMem = &d[cubeMapFaceIndex][0];// description.data;
|
||||
pData[cubeMapFaceIndex].SysMemPitch = width * 4;
|
||||
pData[cubeMapFaceIndex].SysMemSlicePitch = 0;
|
||||
}
|
||||
|
||||
HRESULT hr = wiRenderer::GetDevice()->CreateTexture2D(&texDesc, &pData[0], &helperTextures[HELPERTEXTURE_BLACKCUBEMAP]);
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return helperTextures[HELPERTEXTURE_BLACKCUBEMAP];
|
||||
}
|
||||
|
||||
Texture2D* wiTextureHelper::wiTextureHelperInstance::getWhite()
|
||||
{
|
||||
return getColor(wiColor(255, 255, 255, 255));
|
||||
|
||||
@@ -15,6 +15,7 @@ private:
|
||||
HELPERTEXTURE_RANDOM64X64,
|
||||
HELPERTEXTURE_COLORGRADEDEFAULT,
|
||||
HELPERTEXTURE_NORMALMAPDEFAULT,
|
||||
HELPERTEXTURE_BLACKCUBEMAP,
|
||||
HELPERTEXTURE_COUNT
|
||||
};
|
||||
wiGraphicsTypes::Texture2D* helperTextures[HELPERTEXTURE_COUNT];
|
||||
@@ -27,6 +28,7 @@ private:
|
||||
wiGraphicsTypes::Texture2D* getRandom64x64();
|
||||
wiGraphicsTypes::Texture2D* getColorGradeDefault();
|
||||
wiGraphicsTypes::Texture2D* getNormalMapDefault();
|
||||
wiGraphicsTypes::Texture2D* getBlackCubeMap();
|
||||
|
||||
wiGraphicsTypes::Texture2D* getWhite();
|
||||
wiGraphicsTypes::Texture2D* getBlack();
|
||||
|
||||
Reference in New Issue
Block a user