#pragma once #include "camera.h" #include "window.h" #include "shader.h" #include "vao.h" #include "fbo.h" #include "rbo.h" #include "vbo.h" #include "vertexattribute.h" #ifndef EMSCRIPTEN #include "glew.h" #endif #define RENDERER_BUFFER_COUNT RENDERER_BUFFER_CURSOR + 1 typedef enum RendererBuffer { RENDERER_BUFFER_BACKGROUND, RENDERER_BUFFER_PLANE, RENDERER_BUFFER_WORLD, RENDERER_BUFFER_OVERLAY, RENDERER_BUFFER_UI, RENDERER_BUFFER_META, RENDERER_BUFFER_CURSOR } RendererBuffer; typedef struct Renderer { SDL_GLContext glContext; Window* window; Camera camera[RENDERER_BUFFER_COUNT]; ivec2 bufferSizes[RENDERER_BUFFER_COUNT]; Texture fboTextures[RENDERER_BUFFER_COUNT]; FBO fbos[RENDERER_BUFFER_COUNT]; RBO rbos[RENDERER_BUFFER_COUNT]; VBO vbo; VBO ebo; VAO vao; } Renderer; void renderer_init(Renderer* self, Window* window, CameraType type, const ivec2* bufferSizes); void renderer_clear_color_set(Renderer* self, vec4 color); void renderer_clear(Renderer* self); void renderer_shader_use(Renderer* self, Shader* shader); void renderer_buffer_use(Renderer* self, RendererBuffer buffer); void renderer_buffer_init(Renderer* self, RendererBuffer buffer); void renderer_buffer_free(Renderer* self, RendererBuffer buffer); void renderer_free(Renderer* self); void renderer_update(Renderer* self); void renderer_present(Renderer* self); void renderer_buffer_unbind(void); void renderer_buffer_clear(Renderer* self, RendererBuffer buffer); void renderer_buffer_position_from_window_position ( Renderer* self, RendererBuffer buffer, vec2 windowPosition, vec2 rendererPosition );