11#include "shader/general/resources/cpuwrite/ShaderCpuWriteResourceManager.h"
12#include "shader/general/resources/texture/ShaderTextureResourceManager.h"
13#include "misc/Error.h"
14#include "shader/ShaderManager.h"
15#include "render/general/resources/GpuResourceManager.h"
16#include "render/general/resources/frame/FrameResourcesManager.h"
17#include "render/RenderSettings.h"
18#include "game/camera/CameraProperties.h"
19#include "shader/general/resources/LightingShaderResourceManager.h"
20#include "material/Material.h"
21#include "render/RenderStatistics.h"
26 class PipelineManager;
27 class ShaderConfiguration;
29 class EnvironmentNode;
33 class ShadowMapHandle;
34 class DirectionalLightNode;
85 static std::variant<std::unique_ptr<Renderer>,
Error>
103 virtual std::variant<std::set<std::pair<unsigned int, unsigned int>>,
Error>
114 virtual std::variant<std::set<std::pair<unsigned int, unsigned int>>,
Error>
396 unsigned int& iShadowPassLightInfoArrayIndex);
408 unsigned int& iShadowPassLightInfoArrayIndex);
557 size_t iCurrentFrameResourceIndex,
569 size_t iCurrentFrameResourceIndex,
570 const std::vector<Renderer::MeshesInFrustum::PipelineInFrustumInfo>& vOpaquePipelines) = 0;
583 size_t iCurrentFrameResourceIndex,
584 ComputeExecutionStage stage) = 0;
596 size_t iCurrentFrameResourceIndex,
597 const std::vector<Renderer::MeshesInFrustum::PipelineInFrustumInfo>& vOpaquePipelines,
598 const std::vector<Renderer::MeshesInFrustum::PipelineInFrustumInfo>& vTransparentPipelines) = 0;
712 CameraProperties* pActiveCameraProperties,
size_t iCurrentFrameResourceIndex);
746 static std::unique_ptr<Renderer>
764 static std::variant<std::unique_ptr<Renderer>, std::pair<Error, std::string>>
createRenderer(
767 const std::vector<std::string>& vBlacklistedGpuNames);
775 static void nanosleep(
long long iNanoseconds);
796 unsigned int iRenderTargetWidth,
797 unsigned int iRenderTargetHeight,
Definition: CameraManager.h:16
Definition: CameraProperties.h:22
Definition: DirectionalLightNode.h:14
Definition: EnvironmentNode.h:11
Definition: FrameResourcesManager.h:46
Definition: GameManager.h:34
Definition: GpuResourceManager.h:42
Definition: GpuResource.h:14
Definition: LightingShaderResourceManager.h:50
Definition: Material.h:84
Definition: MeshNode.h:148
Definition: PipelineManager.h:89
Definition: Pipeline.h:20
Definition: PointLightNode.h:15
Definition: RenderSettings.h:45
Definition: RenderStatistics.h:11
FrameTemporaryStatistics frameTemporaryStatistics
Definition: RenderStatistics.h:200
Definition: Renderer.h:39
std::pair< std::recursive_mutex, std::unique_ptr< ShaderConfiguration > > mtxShaderConfiguration
Definition: Renderer.h:859
std::optional< Error > initializeResourceManagers()
Definition: Renderer.cpp:837
std::optional< Error > compileEngineShaders() const
Definition: Renderer.cpp:56
std::recursive_mutex mtxRwRenderResources
Definition: Renderer.h:832
virtual std::string getUsedApiVersion() const =0
LightingShaderResourceManager * getLightingShaderResourceManager() const
Definition: Renderer.cpp:711
void resetLightingShaderResourceManager()
Definition: Renderer.cpp:266
std::unique_ptr< GpuResourceManager > pResourceManager
Definition: Renderer.h:835
virtual void drawShadowMappingPass(FrameResource *pCurrentFrameResource, size_t iCurrentFrameResourceIndex, PipelineManager::GraphicsPipelineRegistry *pGraphicsPipelines)=0
void drawNextFrame()
Definition: Renderer.cpp:289
virtual void prepareRenderTargetForNextFrame()
Definition: Renderer.h:528
std::unique_ptr< ShaderManager > pShaderManager
Definition: Renderer.h:838
std::pair< std::recursive_mutex *, RenderSettings * > getRenderSettings()
Definition: Renderer.cpp:674
size_t getUsedVideoMemoryInMb() const
Definition: Renderer.cpp:684
virtual void executeComputeShadersOnGraphicsQueue(FrameResource *pCurrentFrameResource, size_t iCurrentFrameResourceIndex, ComputeExecutionStage stage)=0
std::pair< std::mutex, FrameConstants > mtxFrameConstants
Definition: Renderer.h:877
virtual RendererType getType() const =0
virtual std::variant< AntialiasingQuality, Error > getMaxSupportedAntialiasingQuality() const =0
static void getDirectionalLightNodeShadowMappingInfo(DirectionalLightNode *pNode, ShadowMapHandle *&pShadowMapHandle, unsigned int &iShadowPassLightInfoArrayIndex)
Definition: Renderer.cpp:1192
GameManager * pGameManager
Definition: Renderer.h:883
virtual std::pair< unsigned int, unsigned int > getRenderTargetSize() const =0
PipelineManager * getPipelineManager() const
Definition: Renderer.cpp:697
std::unique_ptr< ShaderTextureResourceManager > pShaderTextureResourceManager
Definition: Renderer.h:850
static std::variant< std::unique_ptr< Renderer >, Error > create(GameManager *pGameManager, std::optional< RendererType > preferredRenderer)
Definition: Renderer.cpp:601
virtual void present(FrameResource *pCurrentFrameResource, size_t iCurrentFrameResourceIndex)=0
MeshesInFrustum * getMeshesInCameraFrustum(CameraProperties *pActiveCameraProperties, PipelineManager::GraphicsPipelineRegistry *pGraphicsPipelines)
Definition: Renderer.cpp:957
void resetFrameResourcesManager()
Definition: Renderer.cpp:256
virtual std::optional< Error > onRenderSettingsChangedDerived()=0
void setupRenderStats()
Definition: Renderer.cpp:744
std::pair< std::recursive_mutex, std::unique_ptr< ShaderConfiguration > > * getShaderConfiguration()
Definition: Renderer.cpp:687
void updateFrameConstantsBuffer(FrameResource *pCurrentFrameResource, CameraProperties *pCameraProperties)
Definition: Renderer.cpp:146
Window * getWindow() const
Definition: Renderer.cpp:691
void cullLightsOutsideCameraFrustum(CameraProperties *pActiveCameraProperties, size_t iCurrentFrameResourceIndex)
Definition: Renderer.cpp:1071
std::atomic< size_t > * getDrawCallCounter()
Definition: Renderer.h:730
MeshesInFrustum meshesInFrustumLastFrame
Definition: Renderer.h:868
void updateResourcesForNextFrame(unsigned int iRenderTargetWidth, unsigned int iRenderTargetHeight, CameraProperties *pCameraProperties)
Definition: Renderer.cpp:883
void onActiveCameraChanged()
Definition: Renderer.cpp:454
std::optional< Error > initializeRenderer()
Definition: Renderer.cpp:827
virtual void onFramebufferSizeChangedDerived(int iWidth, int iHeight)
Definition: Renderer.h:517
FrameResourcesManager * getFrameResourcesManager() const
Definition: Renderer.cpp:701
virtual void waitForGpuToFinishUsingFrameResource(FrameResource *pFrameResource)=0
std::pair< std::mutex, FrameConstants > * getFrameConstants()
Definition: Renderer.h:719
size_t getTotalVideoMemoryInMb() const
Definition: Renderer.cpp:680
static std::unique_ptr< Renderer > createRenderer(GameManager *pGameManager, std::optional< RendererType > preferredRenderer)
Definition: Renderer.cpp:466
GpuResourceManager * getResourceManager() const
Definition: Renderer.cpp:699
std::recursive_mutex * getRenderResourcesMutex()
Definition: Renderer.cpp:715
void calculateFrameStatistics()
Definition: Renderer.cpp:169
static consteval unsigned int getRecommendedSwapChainBufferCount()
Definition: Renderer.h:382
virtual bool isInitialized() const =0
std::optional< Error > initializeRenderSettings()
Definition: Renderer.cpp:785
void updateTargetTimeToRenderFrame()
Definition: Renderer.cpp:585
std::optional< Error > recalculateLightTileFrustums()
Definition: Renderer.cpp:416
virtual void waitForGpuToFinishWorkUpToThisPoint()=0
static ShadowMapHandle * getPointLightNodeShadowMapHandle(PointLightNode *pNode)
Definition: Renderer.cpp:1213
ShaderTextureResourceManager * getShaderTextureResourceManager() const
Definition: Renderer.cpp:707
ShaderManager * getShaderManager() const
Definition: Renderer.cpp:695
std::pair< std::recursive_mutex, std::unique_ptr< RenderSettings > > mtxRenderSettings
Definition: Renderer.h:865
static constexpr float getMaxDepth()
Definition: Renderer.h:75
virtual std::variant< std::set< std::pair< unsigned int, unsigned int > >, Error > getSupportedRefreshRates() const =0
GameManager * getGameManager() const
Definition: Renderer.cpp:693
void resetGpuResourceManager()
Definition: Renderer.cpp:236
virtual std::vector< std::string > getSupportedGpuNames() const =0
static constexpr float minDepth
Definition: Renderer.h:889
RenderStatistics * getRenderStatistics()
Definition: Renderer.cpp:678
std::optional< Error > onRenderSettingsChanged(bool bShadowMapSizeChanged=false)
Definition: Renderer.cpp:384
virtual std::string getCurrentlyUsedGpuName() const =0
RenderStatistics renderStats
Definition: Renderer.h:880
std::optional< Error > clampSettingsToMaxSupported()
Definition: Renderer.cpp:871
static void getSpotlightNodeShadowMappingInfo(SpotlightNode *pNode, ShadowMapHandle *&pShadowMapHandle, unsigned int &iShadowPassLightInfoArrayIndex)
Definition: Renderer.cpp:1200
virtual GpuResource * getDepthTextureNoMultisampling()=0
void onFramebufferSizeChanged(int iWidth, int iHeight)
Definition: Renderer.cpp:276
std::unique_ptr< PipelineManager > pPipelineManager
Definition: Renderer.h:841
static constexpr float maxDepth
Definition: Renderer.h:892
virtual void prepareForDrawingNextFrame(CameraProperties *pCameraProperties, FrameResource *pCurrentFrameResource)=0
ShaderCpuWriteResourceManager * getShaderCpuWriteResourceManager() const
Definition: Renderer.cpp:703
virtual void drawMeshesDepthPrepass(FrameResource *pCurrentFrameResource, size_t iCurrentFrameResourceIndex, const std::vector< Renderer::MeshesInFrustum::PipelineInFrustumInfo > &vOpaquePipelines)=0
static constexpr unsigned int iRecommendedSwapChainBufferCount
Definition: Renderer.h:886
static unsigned int getPointLightShadowPassLightInfoArrayIndex(PointLightNode *pNode, size_t iCubemapFaceIndex)
Definition: Renderer.cpp:1209
void resetPipelineManager()
Definition: Renderer.cpp:246
virtual std::variant< std::set< std::pair< unsigned int, unsigned int > >, Error > getSupportedRenderResolutions() const =0
virtual void drawMeshesMainPass(FrameResource *pCurrentFrameResource, size_t iCurrentFrameResourceIndex, const std::vector< Renderer::MeshesInFrustum::PipelineInFrustumInfo > &vOpaquePipelines, const std::vector< Renderer::MeshesInFrustum::PipelineInFrustumInfo > &vTransparentPipelines)=0
std::unique_ptr< LightingShaderResourceManager > pLightingShaderResourceManager
Definition: Renderer.h:853
std::unique_ptr< ShaderCpuWriteResourceManager > pShaderCpuWriteResourceManager
Definition: Renderer.h:847
std::unique_ptr< FrameResourcesManager > pFrameResourcesManager
Definition: Renderer.h:844
bool bIsWindowMinimized
Definition: Renderer.h:871
void updateShaderConfiguration()
Definition: Renderer.cpp:717
static constexpr float getMinDepth()
Definition: Renderer.h:68
std::pair< std::mutex, EnvironmentNode * > mtxSpawnedEnvironmentNode
Definition: Renderer.h:874
Definition: Renderer.h:896
Renderer * pRenderer
Definition: Renderer.h:924
std::set< ShaderMacro > currentVertexShaderConfiguration
Definition: Renderer.h:917
void updateShaderConfiguration()
Definition: Renderer.h:914
std::set< ShaderMacro > currentPixelShaderConfiguration
Definition: Renderer.h:920
ShaderConfiguration(Renderer *pRenderer)
Definition: Renderer.h:905
Definition: ShaderCpuWriteResourceManager.h:21
Definition: ShaderManager.h:25
Definition: ShaderTextureResourceManager.h:27
Definition: ShadowMapHandle.h:23
Definition: SpotlightNode.h:15
Definition: FrameResource.h:15
Definition: PipelineManager.h:115
std::atomic< size_t > iDrawCallCount
Definition: RenderStatistics.h:178
Definition: Renderer.h:357
std::pair< std::recursive_mutex *, ShaderLightArray::LightsInFrustum * > mtxPointLightsInFrustum
Definition: Renderer.h:359
std::pair< std::recursive_mutex *, ShaderLightArray::LightsInFrustum * > mtxSpotlightsInFrustum
Definition: Renderer.h:362
Definition: Renderer.h:332
Material * pMaterial
Definition: Renderer.h:334
std::vector< MeshInFrustumInfo > vMeshes
Definition: Renderer.h:337
Definition: Renderer.h:323
std::vector< MeshIndexBufferInfo > vIndexBuffers
Definition: Renderer.h:328
MeshNode * pMeshNode
Definition: Renderer.h:325
Definition: Renderer.h:341
Pipeline * pPipeline
Definition: Renderer.h:343
std::vector< MaterialInFrustumInfo > vMaterials
Definition: Renderer.h:346
Definition: Renderer.h:321
std::vector< PipelineInFrustumInfo > vOpaquePipelines
Definition: Renderer.h:350
std::vector< PipelineInFrustumInfo > vTransparentPipelines
Definition: Renderer.h:353