#ifndef RENDER_H
#define RENDER_H

#include "camera_node.h"
#include "renderable.h"
#include "raylib.h"
#include "resources.h"

//! Initialize the rendering subsystem.
extern void InitializeRenderingSubsystem();
//! Cleanup after rendering system,
//! assumes you won't want to re-initialize after.
extern void CleanupRenderingSubsystem();

//! Register a renderable object through a typeclass.
extern void AddRenderable(Renderable renderable);
//! Remove a renderable object from draw list
extern void RemoveRenderable(Renderable renderable);
//! Set the direction of light for simple shading.
extern void SetLightDirection(Transform transform);

//! Draw a frame to the screen based on the current state of the game.
extern void RenderNextFrame();

//! Called when a shader is loaded, will store the shader to update it's uniforms
extern void Internal_OnShaderLoaded(ShaderResource shader);
//! Called when a shader is unloaded
extern void Internal_OnShaderUnloaded(ShaderResource shader);

#endif // !RENDER_H
