MCPcopy Create free account
hub / github.com/DiligentGraphics/DiligentFX / DepthOfField

Method DepthOfField

PostProcess/DepthOfField/src/DepthOfField.cpp:96–171  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

94}
95
96DepthOfField::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

Callers

nothing calls this directly

Calls 2

GenerateKernelPointsFunction · 0.85
GenerateGaussKernelFunction · 0.85

Tested by

no test coverage detected