62 lines
1.6 KiB
C
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
|
|
);
|