Program Listing for File Renderer.cpp¶
↰ Return to documentation for file (Source\Azura\RenderSystem\Src\Generic\Renderer.cpp
)
#include "Generic/Renderer.h"
#include <utility>
#include "Generic/Window.h"
namespace Azura {
Renderer::Renderer(ApplicationInfo appInfo,
const DeviceRequirements& deviceRequirements,
ApplicationRequirements appRequirements,
const SwapChainRequirements& swapChainRequirements,
const DescriptorRequirements& descriptorRequirements,
Memory::Allocator& mainAllocator,
Memory::Allocator& drawAllocator,
Window& window)
: m_descriptorSlots(descriptorRequirements.m_descriptorSlots.GetSize(), mainAllocator),
m_descriptorSetTable(descriptorRequirements.m_descriptorSets.GetSize(), mainAllocator),
m_mainAllocator(mainAllocator),
m_drawPoolAllocator(drawAllocator),
m_window(window),
m_applicationInfo(std::move(appInfo)),
m_deviceRequirements(deviceRequirements),
m_appRequirements(std::move(appRequirements)),
m_swapChainRequirements(swapChainRequirements),
m_frameCount(0) {
U32 setIdx = 0;
for (const auto& set : descriptorRequirements.m_descriptorSets) {
U32 bindIdx = 0;
for(const auto& descriptorId : set)
{
const auto& slot = descriptorRequirements.m_descriptorSlots[descriptorId];
DescriptorSlot setSlot = {};
setSlot.m_type = slot.m_type;
setSlot.m_stages = slot.m_stages;
setSlot.m_setIdx = setIdx;
setSlot.m_bindIdx = bindIdx;
m_descriptorSlots.PushBack(std::move(setSlot));
++bindIdx;
}
const auto& typeSlot = descriptorRequirements.m_descriptorSlots[set[0]];
DescriptorTableEntry entry = {};
entry.m_count = bindIdx;
entry.m_type = typeSlot.m_type;
m_descriptorSetTable.PushBack(entry);
++setIdx;
}
for (const auto& slot : m_descriptorSlots) {
switch (slot.m_type) {
case DescriptorType::UniformBuffer:
++m_descriptorCount.m_numUniformSlots;
break;
case DescriptorType::Sampler:
++m_descriptorCount.m_numSamplerSlots;
break;
case DescriptorType::SampledImage:
++m_descriptorCount.m_numSampledImageSlots;
break;
case DescriptorType::CombinedImageSampler:
++m_descriptorCount.m_numCombinedSamplerSlots;
break;
case DescriptorType::PushConstant:
++m_descriptorCount.m_numPushConstantsSlots;
break;
default:
break;
}
}
}
void Renderer::EnterRenderFrame() {
}
void Renderer::ExitRenderFrame() {
m_frameCount = (m_frameCount + 1) % m_swapChainRequirements.m_framesInFlight;
}
const ApplicationInfo& Renderer::GetApplicationInfo() const {
return m_applicationInfo;
}
const DeviceRequirements& Renderer::GetDeviceRequirements() const {
return m_deviceRequirements;
}
const ApplicationRequirements& Renderer::GetApplicationRequirements() const {
return m_appRequirements;
}
const SwapChainRequirements& Renderer::GetSwapchainRequirements() const {
return m_swapChainRequirements;
}
U32 Renderer::GetCurrentFrame() const {
return m_frameCount;
}
void Renderer::SetCurrentFrame(U32 frameIdx) {
m_frameCount = frameIdx;
}
} // namespace Azura