#pragma once #include #include #include "Assets.h" #include "Text.h" namespace nf { class Application; class Shader; class Entity; class UIElement; class Light; class Cubemap; class Camera; class GBuffer; class VertexArray; class IndexBuffer; class Renderer { public: Renderer(Application* app); void setFade(bool in, bool out, bool text = true); bool isFadeOutComplete(); void render(Entity& in); void render(UIElement& in); void render(Light& in); void render(Cubemap& in); void doFrame(Camera* camera, float dT); void setAmbient(float am); ~Renderer(); private: void loadBaseAssets(); void createShadowMaps(); void renderShadowMaps(size_t count); void instancedRenderShadows(Shader* shader); Application* m_app; HDC m_hdc; HGLRC m_hglrc; AssetPack m_baseAP; GBuffer* m_gBuffer; unsigned int m_shadowMapFBO; int m_directionalDepthTexSize; int m_pointDepthTexSize; unsigned int m_directionalShadowMap; std::vector m_pointShadowMaps; unsigned int m_texSlots; std::vector m_lights; std::vector m_lGame; Cubemap* m_cubemap; std::vector m_lUI; Shader* m_gBufferShader; Shader* m_lightingShader; Shader* m_textShader; Shader* m_uiTextureShader; Shader* m_cubemapShader; Shader* m_fadeShader; Shader* m_directionalShadowShader; Shader* m_pointShadowShader; bool m_fadeIn, m_fadeOut; float m_fadeInOpacity, m_fadeOutOpacity; bool m_fadeText; bool m_fadeOutComplete; Text m_loadingText; VertexArray* m_quadVAO; IndexBuffer* m_quadIB; }; }