2025-07-13 09:54:57 -06:00

91 lines
2.5 KiB
C

#pragma once
#include "basic.h"
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <stb_image.h>
#include <glm/gtc/type_ptr.hpp>
#include "render_data.h"
#include "user_interface.h"
struct Frame_Buffer {
u32 width = 640;
u32 height = 480;
u32 buffer = 0;
u32 color_tex = 0;
u32 depth_buffer = 0;
};
struct Vertex_Buffer {
u32 vao = 0;
u32 vbo = 0;
};
struct Uniform_Buffer {
u32 ubo_buffer = 0;
};
struct Texture {
u32 texture = 0;
s32 width = 0;
s32 height = 0;
s32 number_of_channels = 0;
string name;
};
struct Shader {
u32 program = 0;
};
struct Renderer {
Shader shader;
Shader alt_shader;
Frame_Buffer frame_buffer;
Vertex_Buffer vertex_buffer;
Uniform_Buffer uniform_buffer;
Texture texture;
Mesh mesh;
bool use_alt_shader = false;
Matrix4 view_matrix = Matrix4(1.0f);
Matrix4 projection_matrix = Matrix4(1.0f);
User_Interface user_interface;
Render_Data render_data;
};
bool init_renderer(Renderer *renderer, u32 width, u32 height);
void set_renderer_size(Renderer *renderer, u32 width, u32 height);
void draw_renderer(Renderer *renderer);
void upload_renderer_data(Renderer *renderer, Mesh *vertex_data);
void cleanup_renderer(Renderer *renderer);
bool init_frame_buffer(Frame_Buffer *frame_buffer, u32 width, u32 height);
bool resize_frame_buffer(Frame_Buffer *frame_buffer, u32 width, u32 height);
bool check_frame_buffer_complete(Frame_Buffer *frame_buffer);
void bind_frame_buffer(Frame_Buffer *frame_buffer);
void unbind_frame_buffer(Frame_Buffer *frame_buffer);
void draw_frame_buffer(Frame_Buffer *frame_buffer);
void cleanup_frame_buffer(Frame_Buffer *frame_buffer);
bool init_vertex_buffer(Vertex_Buffer *vertex_buffer);
void cleanup_vertex_buffer(Vertex_Buffer *vertex_buffer);
void upload_vertex_buffer_data(Vertex_Buffer *vertex_buffer, Mesh *vertex_data);
void bind_vertex_buffer(Vertex_Buffer *vertex_buffer);
void unbind_vertex_buffer();
void draw_vertex_buffer(u32 mode, u32 start, u32 num);
bool init_uniform_buffer(Uniform_Buffer *uniform_buffer);
void upload_uniform_buffer_data(Uniform_Buffer *uniform_buffer, Matrix4 view_matrix, Matrix4 projection_matrix);
void cleanup(Uniform_Buffer *uniform_buffer);
bool load_texture(Texture *texture, string filepath);
void bind_texture(Texture *texture);
void unbind_texture();
void cleanup_texture(Texture *texture);
bool load_shaders(Shader *shader, string vertex_shader_filepath, string fragment_shader_filepath);
u32 load_shader(string filepath, u32 shader_type);
void use_shader(Shader *shader);
void cleanup_shader(Shader *shader);