| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
- //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
- #pragma once
- #include "BsRenderBeastPrerequisites.h"
- #include "Renderer/BsRenderer.h"
- #include "Renderer/BsRendererMaterial.h"
- #include "BsObjectRendering.h"
- #include "BsPostProcessing.h"
- #include "BsRendererView.h"
- #include "BsRendererObject.h"
- #include "BsRendererScene.h"
- namespace bs
- {
- struct RendererAnimationData;
- namespace ct
- {
- class LightGrid;
- /** @addtogroup RenderBeast
- * @{
- */
- /** Information about current time and frame index. */
- struct FrameTimings
- {
- float time;
- float timeDelta;
- UINT64 frameIdx;
- };
- /** Contains information global to an entire frame. */
- struct FrameInfo
- {
- FrameInfo(const FrameTimings& timings, const RendererAnimationData* animData = nullptr)
- :timeDelta(timings.timeDelta), frameIdx(timings.frameIdx), animData(animData)
- { }
- float timeDelta;
- UINT64 frameIdx;
- const RendererAnimationData* animData;
- };
- /**
- * Default renderer for Banshee. Performs frustum culling, sorting and renders all scene objects while applying
- * lighting, shadowing, special effects and post-processing.
- */
- class RenderBeast : public Renderer
- {
- /** Renderer information for a single material. */
- struct RendererMaterial
- {
- Vector<SPtr<GpuParamsSet>> params;
- UINT32 matVersion;
- };
- public:
- RenderBeast();
- ~RenderBeast() { }
- /** @copydoc Renderer::getName */
- const StringID& getName() const override;
- /** @copydoc Renderer::renderAll */
- void renderAll() override;
- /** Sets options used for controlling the rendering. */
- void setOptions(const SPtr<RendererOptions>& options) override;
- /** Returns current set of options used for controlling the rendering. */
- SPtr<RendererOptions> getOptions() const override;
- /** @copydoc Renderer::initialize */
- void initialize() override;
- /** @copydoc Renderer::destroy */
- void destroy() override;
- /** @copydoc Renderer::captureSceneCubeMap */
- void captureSceneCubeMap(const SPtr<Texture>& cubemap, const Vector3& position,
- const CaptureSettings& settings) override;
- private:
- /** @copydoc Renderer::notifyCameraAdded */
- void notifyCameraAdded(Camera* camera) override;
- /** @copydoc Renderer::notifyCameraUpdated */
- void notifyCameraUpdated(Camera* camera, UINT32 updateFlag) override;
- /** @copydocRenderer::notifyCameraRemoved */
- void notifyCameraRemoved(Camera* camera) override;
- /** @copydoc Renderer::notifyLightAdded */
- void notifyLightAdded(Light* light) override;
- /** @copydoc Renderer::notifyLightUpdated */
- void notifyLightUpdated(Light* light) override;
- /** @copydoc Renderer::notifyLightRemoved */
- void notifyLightRemoved(Light* light) override;
- /** @copydoc Renderer::notifyRenderableAdded */
- void notifyRenderableAdded(Renderable* renderable) override;
- /** @copydoc Renderer::notifyRenderableUpdated */
- void notifyRenderableUpdated(Renderable* renderable) override;
- /** @copydoc Renderer::notifyRenderableRemoved */
- void notifyRenderableRemoved(Renderable* renderable) override;
- /** @copydoc Renderer::notifyReflectionProbeAdded */
- void notifyReflectionProbeAdded(ReflectionProbe* probe) override;
- /** @copydoc Renderer::notifyReflectionProbeUpdated */
- void notifyReflectionProbeUpdated(ReflectionProbe* probe, bool texture) override;
- /** @copydoc Renderer::notifyReflectionProbeRemoved */
- void notifyReflectionProbeRemoved(ReflectionProbe* probe) override;
- /** @copydoc Renderer::notifyLightProbeVolumeAdded */
- void notifyLightProbeVolumeAdded(LightProbeVolume* volume) override;
- /** @copydoc Renderer::notifyLightProbeVolumeUpdated */
- void notifyLightProbeVolumeUpdated(LightProbeVolume* volume) override;
- /** @copydoc Renderer::notifyLightProbeVolumeRemoved */
- void notifyLightProbeVolumeRemoved(LightProbeVolume* volume) override;
- /** @copydoc Renderer::notifySkyboxAdded */
- void notifySkyboxAdded(Skybox* skybox) override;
- /** @copydoc Renderer::notifySkyboxRemoved */
- void notifySkyboxRemoved(Skybox* skybox) override;
- /**
- * Updates the render options on the core thread.
- *
- * @note Core thread only.
- */
- void syncOptions(const RenderBeastOptions& options);
- /**
- * Performs rendering over all camera proxies.
- *
- * @param[in] timings Information about frame time and frame index.
- *
- * @note Core thread only.
- */
- void renderAllCore(FrameTimings timings);
- /**
- * Renders all views in the provided view group.
- *
- * @note Core thread only.
- */
- void renderViews(RendererViewGroup& viewGroup, const FrameInfo& frameInfo);
- /**
- * Renders all objects visible by the provided view.
- *
- * @note Core thread only.
- */
- void renderView(const RendererViewGroup& viewGroup, RendererView& view, const FrameInfo& frameInfo);
- /**
- * Renders all overlay callbacks of the provided view.
- *
- * @note Core thread only.
- */
- void renderOverlay(RendererView& view);
- /** Creates data used by the renderer on the core thread. */
- void initializeCore();
- /** Destroys data used by the renderer on the core thread. */
- void destroyCore();
- /** Updates the global reflection probe cubemap array with changed probe textures. */
- void updateReflProbeArray();
- // Core thread only fields
- // Scene data
- SPtr<RendererScene> mScene;
- //// Base pass
- ObjectRenderer* mObjectRenderer = nullptr;
- SPtr<RenderBeastOptions> mCoreOptions;
- // Helpers to avoid memory allocations
- RendererViewGroup* mMainViewGroup = nullptr;
- // Sim thread only fields
- SPtr<RenderBeastOptions> mOptions;
- bool mOptionsDirty = true;
- };
- /** @} */
- }}
|