frillrun/src/engine/renderer.h
2024-09-26 05:30:45 -04:00

62 lines
1.6 KiB
C

#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
);