aboutsummaryrefslogtreecommitdiff
path: root/09-september/tomcat/renderer/renderer.h
diff options
context:
space:
mode:
authorThomas Guillermo Albers Raviola <thomas@thomaslabs.org>2026-01-16 23:02:32 +0100
committerThomas Guillermo Albers Raviola <thomas@thomaslabs.org>2026-01-16 23:02:32 +0100
commit6b8af9cf83851c075c6c9514b1deaa931c2b19a4 (patch)
tree428986b49c32e21d3f7a3c2dfa41858ae0153209 /09-september/tomcat/renderer/renderer.h
Initial commit
Diffstat (limited to '09-september/tomcat/renderer/renderer.h')
-rw-r--r--09-september/tomcat/renderer/renderer.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/09-september/tomcat/renderer/renderer.h b/09-september/tomcat/renderer/renderer.h
new file mode 100644
index 0000000..791d65d
--- /dev/null
+++ b/09-september/tomcat/renderer/renderer.h
@@ -0,0 +1,86 @@
+#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