MCPcopy Create free account
hub / github.com/TheRealMJP/Shadows / GetTempRenderTarget

Method GetTempRenderTarget

Shadows/SampleFramework11/PostProcessorBase.cpp:319–369  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

317}
318
319TempRenderTarget* PostProcessorBase::GetTempRenderTarget(uint32 width, uint32 height, DXGI_FORMAT format,
320 uint32 msCount, uint32 msQuality, uint32 mipLevels,
321 bool generateMipMaps, bool useAsUAV)
322{
323 // Look through existing render targets
324 for (size_t i = 0; i < tempRenderTargets.size(); ++i)
325 {
326 TempRenderTarget* rt = tempRenderTargets[i];
327 if (!rt->InUse && rt->Width == width && rt->Height == height && rt->Format == format
328 && rt->MSCount == msCount && rt->MSQuality == msQuality && (rt->UAView != nullptr) == useAsUAV)
329 {
330 rt->InUse = true;
331 return rt;
332 }
333 }
334
335 // Didn't find one, have to make one
336 TempRenderTarget* rt = new TempRenderTarget();
337 D3D11_TEXTURE2D_DESC desc;
338 desc.Width = width;
339 desc.Height = height;
340 desc.ArraySize = 1;
341 desc.BindFlags = D3D11_BIND_SHADER_RESOURCE|D3D11_BIND_RENDER_TARGET;
342 if(useAsUAV)
343 desc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS;
344 desc.CPUAccessFlags = 0;
345 desc.Format = format;
346 desc.MipLevels = mipLevels;
347 desc.MiscFlags = generateMipMaps ? D3D11_RESOURCE_MISC_GENERATE_MIPS : 0;
348 desc.SampleDesc.Count = msCount;
349 desc.SampleDesc.Quality = msQuality;
350 desc.Usage = D3D11_USAGE_DEFAULT;
351 DXCall(device->CreateTexture2D(&desc, nullptr, &rt->Texture));
352 DXCall(device->CreateRenderTargetView(rt->Texture, nullptr, &rt->RTView));
353 DXCall(device->CreateShaderResourceView(rt->Texture, nullptr, &rt->SRView));
354
355 if(useAsUAV)
356 device->CreateUnorderedAccessView(rt->Texture, nullptr, &rt->UAView);
357 else
358 rt->UAView = nullptr;
359
360 rt->Width = width;
361 rt->Height = height;
362 rt->MSCount = msCount;
363 rt->MSQuality = msQuality;
364 rt->Format = format;
365 rt->InUse = true;
366 tempRenderTargets.push_back(rt);
367
368 return tempRenderTargets[tempRenderTargets.size() - 1];
369}
370
371void PostProcessorBase::ClearTempRenderTargetCache()
372{

Callers

nothing calls this directly

Calls 1

DXCallFunction · 0.85

Tested by

no test coverage detected