#ifndef RENDERER_H #define RENDERER_H #include "../terrain.h" #include "../util/array.h" #include "vertex.h" #include "../particles/particles.h" #include "renderer_types.h" #include "stdint.h" #include "window.h" #define MAX_STRING_LENGTH 128 #define MAX_TEXTURES 2048 #define MAX_MODELS 2048 #define MAX_MESHES 2048 #define MAX_SHADERS 32 /** Beginning of rendering functions **/ typedef struct _GlInfo { char version[MAX_STRING_LENGTH]; char shading_version[MAX_STRING_LENGTH]; char vendor[MAX_STRING_LENGTH]; } GlInfo; typedef struct _Renderer { GlInfo info; Mesh *default_quad; Shader *default_shader; GLuint instance_vbo; Texture *textures[MAX_TEXTURES]; /* All loaded textures */ int num_textures; Shader *shaders[MAX_SHADERS]; /* All loaded shaders */ int num_shaders; Model *models[MAX_MODELS]; /* All created shapes */ int num_models; Mesh *meshes[MAX_MESHES]; int num_meshes; Window *window; GLuint shadow_fbo; /* Frame buffer for shadow mapping */ GLuint shadow_map; /* Texture for rendering the shadow map (shadow mapping) */ GLuint shadow_color; GLint shadow_width; GLint shadow_height; /** TEMP **/ Mat4 shadow_mvp; Vec3 inv_light_dir; Shader *shadow_shader; /** TEMP **/ } Renderer; extern Renderer render; extern void Render_Init(Window *window); extern void Render_BeginFrame(); /* Load lights into the current shader program */ extern void Render_LoadLights(Shader *shader, const Light *lights, int n); extern void Render_DrawEntity(Shader *shader, Mat4 *projectedViewMatrix, Entity *entity); extern void Render_DrawTerrain(Shader *shader, Mat4 *projectedViewMatrix, Terrain *terrain); extern void Render_DrawSky(Shader *shader, Mat4 *viewMatrix, Mat4 *projectionMatrix, Skybox *sky); extern void Render_DrawParticles(Shader *shader, Mat4 *viewMatrix, Mat4 *projectionMatrix); extern void Render_EndFrame(); extern void Render_Shutdown(); extern Mat4 Entity_GetModelTransform(Entity* entity); extern Vec2 Entity_GetTexOffset(Entity *entity); /** End of rendering functions **/ #endif // RENDERER_H