#pragma once #include "graphics_device.h" #include "shader.h" #include "mesh.h" #include "texture.h" #include "camera.h" #include "material.h" #include "../include/engine_api.h" #include "../ASM/math_c_fallback.h" typedef struct Renderer Renderer; struct Renderer { GraphicsDevice* device; Shader* current_shader; Mat4 view; Mat4 projection; Vec3 light_dir; Vec4 light_color; Vec4 ambient_color; }; Renderer* renderer_create(GraphicsDevice* device); void renderer_destroy(Renderer* renderer); void renderer_begin_frame(Renderer* renderer); void renderer_end_frame(Renderer* renderer); void renderer_draw_mesh(Renderer* renderer, Mesh* mesh); void renderer_draw_mesh_with_shader(Renderer* renderer, Mesh* mesh, Shader* shader, const Mat4* world, Texture* tex); void renderer_draw_mesh_with_material(Renderer* renderer, Mesh* mesh, Material* material, const Mat4* world); void renderer_set_view(Renderer* renderer, const Mat4* view); void renderer_set_projection(Renderer* renderer, const Mat4* projection); void renderer_set_light(Renderer* renderer, Vec3 dir, Vec4 color, Vec4 ambient); GraphicsDevice* renderer_get_device(Renderer* renderer); void renderer_resize(Renderer* renderer, int width, int height);