| 94 | } |
| 95 | |
| 96 | DepthOfField::DepthOfField(IRenderDevice* pDevice, const CreateInfo& CI) : |
| 97 | m_pDOFAttribs{std::make_unique<HLSL::DepthOfFieldAttribs>()}, |
| 98 | m_Settings{CI} |
| 99 | { |
| 100 | DEV_CHECK_ERR(pDevice != nullptr, "pDevice must not be null"); |
| 101 | |
| 102 | RenderDeviceWithCache_N Device{pDevice}; |
| 103 | |
| 104 | RefCntAutoPtr<IBuffer> pBuffer; |
| 105 | CreateUniformBuffer(Device, sizeof(HLSL::DepthOfFieldAttribs), "DepthOfFieldAttribs::ConstantBuffer", &pBuffer, USAGE_DEFAULT, BIND_UNIFORM_BUFFER, CPU_ACCESS_NONE, m_pDOFAttribs.get()); |
| 106 | m_Resources.Insert(RESOURCE_IDENTIFIER_CONSTANT_BUFFER, pBuffer); |
| 107 | |
| 108 | { |
| 109 | auto KernelData = GenerateKernelPoints(m_pDOFAttribs->BokehKernelRingCount, m_pDOFAttribs->BokehKernelRingDensity); |
| 110 | KernelData.resize(128, float2(0.0, 0.0)); |
| 111 | |
| 112 | TextureSubResData ResourceData; |
| 113 | ResourceData.pData = KernelData.data(); |
| 114 | ResourceData.Stride = sizeof(float2) * KernelData.size(); |
| 115 | |
| 116 | TextureData TexData; |
| 117 | TexData.pSubResources = &ResourceData; |
| 118 | TexData.NumSubresources = 1; |
| 119 | |
| 120 | TextureDesc Desc; |
| 121 | Desc.Name = "DepthOfField::LargeBokehKernel"; |
| 122 | Desc.Type = RESOURCE_DIM_TEX_2D; |
| 123 | Desc.Width = static_cast<Uint32>(KernelData.size()); |
| 124 | Desc.Height = 1; |
| 125 | Desc.Format = TEX_FORMAT_RG32_FLOAT; |
| 126 | Desc.BindFlags = BIND_SHADER_RESOURCE | BIND_RENDER_TARGET; |
| 127 | m_Resources.Insert(RESOURCE_IDENTIFIER_BOKEH_LARGE_KERNEL_TEXTURE, Device.CreateTexture(Desc, &TexData)); |
| 128 | } |
| 129 | |
| 130 | { |
| 131 | auto KernelData = GenerateKernelPoints(DOF_BOKEH_KERNEL_SMALL_RING_COUNT, DOF_BOKEH_KERNEL_SMALL_RING_DENSITY); |
| 132 | |
| 133 | TextureSubResData ResourceData; |
| 134 | ResourceData.pData = KernelData.data(); |
| 135 | ResourceData.Stride = sizeof(float2) * KernelData.size(); |
| 136 | |
| 137 | TextureData TexData; |
| 138 | TexData.pSubResources = &ResourceData; |
| 139 | TexData.NumSubresources = 1; |
| 140 | |
| 141 | TextureDesc Desc; |
| 142 | Desc.Name = "DepthOfField::SmallBokehKernel"; |
| 143 | Desc.Type = RESOURCE_DIM_TEX_2D; |
| 144 | Desc.Width = static_cast<Uint32>(KernelData.size()); |
| 145 | Desc.Height = 1; |
| 146 | Desc.Format = TEX_FORMAT_RG32_FLOAT; |
| 147 | Desc.BindFlags = BIND_SHADER_RESOURCE | BIND_RENDER_TARGET; |
| 148 | m_Resources.Insert(RESOURCE_IDENTIFIER_BOKEH_SMALL_KERNEL_TEXTURE, Device.CreateTexture(Desc, &TexData)); |
| 149 | } |
| 150 | |
| 151 | { |
| 152 | auto KernelData = GenerateGaussKernel(DOF_GAUSS_KERNEL_RADIUS, DOF_GAUSS_KERNEL_SIGMA); |
| 153 |
nothing calls this directly
no test coverage detected