// // Created by sfd on 25-11-21. // #ifndef DEMOLAYER_H #define DEMOLAYER_H #include "Prism.h" #include "Prism/Renderer/Camera.h" #include "Prism/Renderer/FrameBuffer.h" #include "Prism/Renderer/Material.h" #include "Prism/Renderer/Mesh.h" class DemoLayer : public Prism::Layer { public: DemoLayer(); virtual ~DemoLayer(); virtual void OnAttach() override; virtual void OnDetach() override; virtual void OnUpdate(Prism::TimeStep deltaTime) override; virtual void OnImGuiRender() override; virtual void OnEvent(Prism::Event& e) override; private: float m_ClearColor[4]; Prism::Ref m_QuadShader; Prism::Ref m_HDRShader; Prism::Ref m_GridShader; Prism::Ref m_Mesh; Prism::Ref m_SphereMesh, m_PlaneMesh; Prism::Ref m_BRDFLUT; Prism::Ref m_MeshMaterial; Prism::Ref m_GridMaterial; std::vector> m_MetalSphereMaterialInstances; std::vector> m_DielectricSphereMaterialInstances; float m_GridScale = 16.025f, m_GridSize = 0.025f; float m_MeshScale = 1.0f; Prism::Ref m_Shader; Prism::Ref m_PBRShader; struct AlbedoInput { glm::vec3 Color = { 0.972f, 0.96f, 0.915f }; // Silver, from https://docs.unrealengine.com/en-us/Engine/Rendering/Materials/PhysicallyBased Prism::Ref TextureMap; bool SRGB = true; bool UseTexture = false; }; AlbedoInput m_AlbedoInput; struct NormalInput { Prism::Ref TextureMap; bool UseTexture = false; }; NormalInput m_NormalInput; struct MetalnessInput { float Value = 1.0f; Prism::Ref TextureMap; bool UseTexture = false; }; MetalnessInput m_MetalnessInput; struct RoughnessInput { float Value = 0.5f; Prism::Ref TextureMap; bool UseTexture = false; }; RoughnessInput m_RoughnessInput; Prism::Ref m_Framebuffer, m_FinalPresentBuffer; Prism::Ref m_VertexBuffer; Prism::Ref m_IndexBuffer; Prism::Ref m_EnvironmentCubeMap, m_EnvironmentIrradiance; Prism::Camera m_Camera; struct Light { glm::vec3 Direction; glm::vec3 Radiance; }; Light m_Light; float m_LightMultiplier = 0.3f; // PBR params float m_Exposure = 1.0f; bool m_RadiancePrefilter = false; float m_EnvMapRotation = 0.0f; enum class Scene : uint32_t { Spheres = 0, Model = 1 }; Scene m_Scene; // Editor resources Prism::Ref m_CheckerboardTex; }; #endif //DEMOLAYER_H