Ssao::Ssao(ID3D11Device* device, ID3D11DeviceContext* dc, int width, int height, float fovy, float farZ) : md3dDevice(device), mDC(dc), mScreenQuadVB(0), mScreenQuadIB(0), mRandomVectorSRV(0), mNormalDepthRTV(0), mNormalDepthSRV(0), mAmbientRTV0(0), mAmbientSRV0(0), mAmbientRTV1(0), mAmbientSRV1(0) { OnSize(width, height, fovy, farZ); BuildFullScreenQuad(); BuildOffsetVectors(); BuildRandomVectorTexture(); }
void SSAO::Initialize(int screenWidth, int screenHeight, float farC, float nearC, float fov) { _app->SwitchActive("sib"); _screenHeight = screenHeight; _screenWidth = screenWidth; _showDebug = false; _near = nearC; _far = farC; _fov = fov; _kernalSize = 16; _noiseSize = 64; _rad = 0.065; _totStrength = 1.6; _strength = 0.7; _offset = 18; _falloff = 0.0001; _defrad = 0.02; _deftotStrength = 3.38; _defstrength = 0.7; _defoffset = 18; _deffalloff = 0.0002; _blurSize = 4; _defblurSize = 4; srand(time(NULL)); //create cosntant buffer D3D11_BUFFER_DESC ssaoBuff; ssaoBuff.BindFlags = D3D11_BIND_CONSTANT_BUFFER; ssaoBuff.ByteWidth = sizeof(SSAOBuffer); ssaoBuff.Usage = D3D11_USAGE_DYNAMIC; ssaoBuff.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; ssaoBuff.MiscFlags = 0; ssaoBuff.StructureByteStride = 0; _device->CreateBuffer(&ssaoBuff, 0, &_ssaoBuffer); //create cosntant buffer D3D11_BUFFER_DESC ssaoBuff2; ssaoBuff2.BindFlags = D3D11_BIND_CONSTANT_BUFFER; ssaoBuff2.ByteWidth = sizeof(SSAOBuffer2); ssaoBuff2.Usage = D3D11_USAGE_DYNAMIC; ssaoBuff2.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; ssaoBuff2.MiscFlags = 0; ssaoBuff2.StructureByteStride = 0; HRESULT hret = _device->CreateBuffer(&ssaoBuff2, 0, &_ssaoBuffer2); _deviceContext->PSSetConstantBuffers(11, 1, &_ssaoBuffer2); _deviceContext->PSSetConstantBuffers(10, 1, &_ssaoBuffer); _deviceContext->VSSetConstantBuffers(10, 1, &_ssaoBuffer); //initialize render targets _normalAndDepthBuffer = new RenderTarget(_device, _deviceContext); _normalAndDepthBuffer->CreateRenderTarget(_screenWidth, _screenHeight, DXGI_FORMAT_R32G32B32A32_FLOAT); _ssaoRT = new RenderTarget(_device, _deviceContext); _ssaoRT->CreateRenderTarget(_screenWidth, _screenHeight, DXGI_FORMAT_R32_FLOAT); _blurRT = new RenderTarget(_device, _deviceContext); _blurRT->CreateRenderTarget(_screenWidth, _screenHeight, DXGI_FORMAT_R32_FLOAT); BuildFullScreenQuad(); BuildSampleKernal(); BuildNoise(); BuildFrustumCorner(); BuildTextures(); BuildUI(); _ndPass= new ShaderProgram(_device, _deviceContext); _ndPass->CompileShaders(L"media/hlsl/normalAndDepthPass.vsh", L"media/hlsl/normalAndDepthPass.psh"); _ssaoPass= new ShaderProgram(_device, _deviceContext); _ssaoPass->CompileShaders(L"media/hlsl/ssaoPass.vsh", L"media/hlsl/ssaoPass.psh"); _blurPass= new ShaderProgram(_device, _deviceContext); _blurPass->CompileShaders(L"media/hlsl/blurrPass.vsh", L"media/hlsl/blurrPass.psh"); _debug= new ShaderProgram(_device, _deviceContext); _debug->CompileShaders(L"media/hlsl/debug.vsh", L"media/hlsl/debug.psh"); UpdateBuffer(); UpdateBuffer2(); }