5efe28fdf9
* large renderer state refactor; added subsurface scattering energy conservation; added emitted particle subsurface scattering; removed area lights; optimizations; * added layerMask support in shaders * fixed incorrect shadow priority for directional light; fix point light shadow disconnect; * fix incorrect shadow assignment
89 lines
2.1 KiB
C++
89 lines
2.1 KiB
C++
#pragma once
|
|
#include "RenderPath.h"
|
|
#include "wiGUI.h"
|
|
#include "wiEvent.h"
|
|
|
|
#include <string>
|
|
|
|
class wiSprite;
|
|
class wiSpriteFont;
|
|
|
|
struct RenderItem2D
|
|
{
|
|
enum TYPE
|
|
{
|
|
SPRITE,
|
|
FONT,
|
|
} type = SPRITE;
|
|
union
|
|
{
|
|
wiSprite* sprite = nullptr;
|
|
wiSpriteFont* font;
|
|
};
|
|
int order = 0;
|
|
};
|
|
struct RenderLayer2D
|
|
{
|
|
std::vector<RenderItem2D> items;
|
|
std::string name;
|
|
int order = 0;
|
|
};
|
|
|
|
class RenderPath2D :
|
|
public RenderPath
|
|
{
|
|
private:
|
|
wiGraphics::Texture rtStenciled;
|
|
wiGraphics::Texture rtStenciled_resolved;
|
|
wiGraphics::Texture rtFinal;
|
|
|
|
wiGraphics::RenderPass renderpass_stenciled;
|
|
wiGraphics::RenderPass renderpass_final;
|
|
|
|
wiGUI GUI;
|
|
wiEvent::Handle resolutionChange_handle;
|
|
wiEvent::Handle dpiChange_handle;
|
|
|
|
public:
|
|
// create resolution dependant resources, such as render targets
|
|
virtual void ResizeBuffers();
|
|
// update resolution dependent elements, such as elements dependent on current monitor DPI
|
|
virtual void ResizeLayout() {}
|
|
|
|
void Load() override;
|
|
void Start() override;
|
|
void Update(float dt) override;
|
|
void FixedUpdate() override;
|
|
void Render() const override;
|
|
void Compose(wiGraphics::CommandList cmd) const override;
|
|
|
|
const wiGraphics::Texture& GetRenderResult() const { return rtFinal; }
|
|
virtual const wiGraphics::Texture* GetDepthStencil() const { return nullptr; }
|
|
virtual const wiGraphics::Texture* GetGUIBlurredBackground() const { return nullptr; }
|
|
|
|
void AddSprite(wiSprite* sprite, const std::string& layer = "");
|
|
void RemoveSprite(wiSprite* sprite);
|
|
void ClearSprites();
|
|
int GetSpriteOrder(wiSprite* sprite);
|
|
|
|
void AddFont(wiSpriteFont* font, const std::string& layer = "");
|
|
void RemoveFont(wiSpriteFont* font);
|
|
void ClearFonts();
|
|
int GetFontOrder(wiSpriteFont* font);
|
|
|
|
std::vector<RenderLayer2D> layers{ 1 };
|
|
void AddLayer(const std::string& name);
|
|
void SetLayerOrder(const std::string& name, int order);
|
|
void SetSpriteOrder(wiSprite* sprite, int order);
|
|
void SetFontOrder(wiSpriteFont* font, int order);
|
|
void SortLayers();
|
|
void CleanLayers();
|
|
|
|
const wiGUI& GetGUI() const { return GUI; }
|
|
wiGUI& GetGUI() { return GUI; }
|
|
|
|
float resolutionScale = 1.0f;
|
|
virtual XMUINT2 GetInternalResolution() const;
|
|
};
|
|
|