first commit
This commit is contained in:
31
src/game/render/RENDER_COMMON.h
Normal file
31
src/game/render/RENDER_COMMON.h
Normal file
@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
|
||||
#include "../../engine/renderer.h"
|
||||
#include "../../engine/texture.h"
|
||||
|
||||
typedef enum Flip
|
||||
{
|
||||
FLIP_NONE,
|
||||
FLIP_HORIZONTAL,
|
||||
FLIP_VERTICAL,
|
||||
FLIP_HORIZONTAL_VERTICAL
|
||||
} Flip;
|
||||
|
||||
typedef enum Origin
|
||||
{
|
||||
ORIGIN_CENTER,
|
||||
ORIGIN_TOP_LEFT,
|
||||
ORIGIN_TOP,
|
||||
ORIGIN_TOP_RIGHT,
|
||||
ORIGIN_RIGHT,
|
||||
ORIGIN_BOTTOM_RIGHT,
|
||||
ORIGIN_BOTTOM,
|
||||
ORIGIN_BOTTOM_LEFT,
|
||||
ORIGIN_LEFT,
|
||||
} Origin;
|
||||
|
||||
typedef struct Postprocessing
|
||||
{
|
||||
vec4 color;
|
||||
vec4 colorCover;
|
||||
} Postprocessing;
|
44
src/game/render/buffer.c
Normal file
44
src/game/render/buffer.c
Normal file
@ -0,0 +1,44 @@
|
||||
#include "buffer.h"
|
||||
|
||||
void
|
||||
buffer_draw(Renderer* renderer, Shader* shader, RendererBuffer buffer, Postprocessing* postprocessing)
|
||||
{
|
||||
mat4 model;
|
||||
mat4 projection;
|
||||
mat4 view;
|
||||
vec2 size;
|
||||
vec3 position;
|
||||
Texture* texture;
|
||||
|
||||
glm_vec2_zero(size);
|
||||
glm_vec3_zero(position);
|
||||
glm_mat4_identity(model);
|
||||
|
||||
size[0] = renderer->bufferSizes[buffer][0];
|
||||
size[1] = renderer->bufferSizes[buffer][1];
|
||||
|
||||
position[2] *= BUFFER_Z_INCREMENT;
|
||||
|
||||
glm_translate(model, position);
|
||||
|
||||
camera_projection_get(&renderer->camera[buffer], projection);
|
||||
camera_view_get(&renderer->camera[buffer], view);
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
texture_quad_draw
|
||||
(
|
||||
&renderer->fboTextures[buffer],
|
||||
renderer,
|
||||
shader,
|
||||
(f32*)TEXTURE_QUAD_UV_MIN_DEFAULT,
|
||||
(f32*)TEXTURE_QUAD_UV_MAX_DEFAULT,
|
||||
model,
|
||||
view,
|
||||
projection,
|
||||
size,
|
||||
postprocessing->color,
|
||||
postprocessing->colorCover,
|
||||
FLIP_HORIZONTAL_VERTICAL
|
||||
);
|
||||
}
|
8
src/game/render/buffer.h
Normal file
8
src/game/render/buffer.h
Normal file
@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include "postprocessing.h"
|
||||
#include "texture_quad.h"
|
||||
|
||||
#define BUFFER_Z_INCREMENT 0.0f
|
||||
|
||||
void buffer_draw(Renderer* renderer, Shader* shader, RendererBuffer buffer, Postprocessing* postprocessing);
|
8
src/game/render/postprocessing.c
Normal file
8
src/game/render/postprocessing.c
Normal file
@ -0,0 +1,8 @@
|
||||
#include "postprocessing.h"
|
||||
|
||||
void
|
||||
postprocessing_init(Postprocessing* postprocessing, vec4 color, vec4 colorCover)
|
||||
{
|
||||
glm_vec4_copy(color, postprocessing->color);
|
||||
glm_vec4_copy(colorCover, postprocessing->colorCover);
|
||||
}
|
5
src/game/render/postprocessing.h
Normal file
5
src/game/render/postprocessing.h
Normal file
@ -0,0 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include "RENDER_COMMON.h"
|
||||
|
||||
void postprocessing_init(Postprocessing* postprocessing, vec4 color, vec4 colorCover);
|
97
src/game/render/texture_quad.c
Normal file
97
src/game/render/texture_quad.c
Normal file
@ -0,0 +1,97 @@
|
||||
#include "texture_quad.h"
|
||||
|
||||
void
|
||||
texture_quad_draw
|
||||
(
|
||||
Texture* texture,
|
||||
Renderer* renderer,
|
||||
Shader* shader,
|
||||
vec2 uvMin,
|
||||
vec2 uvMax,
|
||||
mat4 model,
|
||||
mat4 view,
|
||||
mat4 projection,
|
||||
vec2 size,
|
||||
vec4 color,
|
||||
vec4 colorCover,
|
||||
Flip flip
|
||||
)
|
||||
{
|
||||
f32 vertices[4][5];
|
||||
|
||||
u32 indices[2][3] = {{1, 2, 3}, {0, 1, 3}};
|
||||
f32 verticiesFlipNone[4][5] =
|
||||
{
|
||||
{0.0f, 0.0f, 0.0f, uvMin[0], uvMin[1]},
|
||||
{0.0f, size[1], 0.0f, uvMin[0], uvMax[1]},
|
||||
{size[0], size[1], 0.0f, uvMax[0], uvMax[1]},
|
||||
{size[0], 0.0f, 0.0f, uvMax[0], uvMin[1]}
|
||||
};
|
||||
|
||||
f32 verticiesFlipHorizontal[4][5] =
|
||||
{
|
||||
{size[0], 0.0f, 0.0f, uvMin[0], uvMin[1]},
|
||||
{size[0], size[1], 0.0f, uvMin[0], uvMax[1]},
|
||||
{0.0f, size[1], 0.0f, uvMax[0], uvMax[1]},
|
||||
{0.0f, 0.0f, 0.0f, uvMax[0], uvMin[1]}
|
||||
};
|
||||
|
||||
f32 verticiesFlipVertical[4][5] =
|
||||
{
|
||||
{size[0], size[1], 0.0f, uvMin[0], uvMin[1]},
|
||||
{size[0], 0.0f, 0.0f, uvMin[0], uvMax[1]},
|
||||
{0.0f, 0.0f, 0.0f, uvMax[0], uvMax[1]},
|
||||
{0.0f, size[1], 0.0f, uvMax[0], uvMin[1]}
|
||||
};
|
||||
|
||||
f32 verticiesFlipHorizontalVertical[4][5] =
|
||||
{
|
||||
{0.0f, size[1], 0.0f, uvMin[0], uvMin[1]},
|
||||
{0.0f, 0.0f, 0.0f, uvMin[0], uvMax[1]},
|
||||
{size[0], 0.0f, 0.0f, uvMax[0], uvMax[1]},
|
||||
{size[0], size[1], 0.0f, uvMax[0], uvMin[1]}
|
||||
};
|
||||
|
||||
switch (flip)
|
||||
{
|
||||
case FLIP_HORIZONTAL:
|
||||
memcpy(vertices, verticiesFlipHorizontal, sizeof(vertices));
|
||||
break;
|
||||
case FLIP_VERTICAL:
|
||||
memcpy(vertices, verticiesFlipVertical, sizeof(vertices));
|
||||
break;
|
||||
case FLIP_HORIZONTAL_VERTICAL:
|
||||
memcpy(vertices, verticiesFlipHorizontalVertical, sizeof(vertices));
|
||||
break;
|
||||
case FLIP_NONE:
|
||||
default:
|
||||
memcpy(vertices, verticiesFlipNone, sizeof(vertices));
|
||||
break;
|
||||
}
|
||||
|
||||
vao_bind(&renderer->vao);
|
||||
|
||||
vbo_bind(&renderer->vbo);
|
||||
vbo_buffer(&renderer->vbo, sizeof(vertices), vertices);
|
||||
|
||||
vbo_bind(&renderer->ebo);
|
||||
vbo_buffer(&renderer->ebo, sizeof(indices), indices);
|
||||
|
||||
vertex_attribute_set(0, 3, GL_FLOAT, 5 * sizeof(f32), 0);
|
||||
vertex_attribute_set(1, 2, GL_FLOAT, 5 * sizeof(f32), 3 * sizeof(f32));
|
||||
|
||||
renderer_shader_use(renderer, shader);
|
||||
|
||||
shader_uniform_mat4_set(shader, TEXTURE_QUAD_UNIFORM_PROJECTION, projection);
|
||||
shader_uniform_mat4_set(shader, TEXTURE_QUAD_UNIFORM_VIEW, view);
|
||||
shader_uniform_mat4_set(shader, TEXTURE_QUAD_UNIFORM_MODEL, model);
|
||||
shader_uniform_vec2_set(shader, TEXTURE_QUAD_UNIFORM_SIZE, size);
|
||||
shader_uniform_vec4_set(shader, TEXTURE_QUAD_UNIFORM_COLOR, color);
|
||||
shader_uniform_vec4_set(shader, TEXTURE_QUAD_UNIFORM_COLOR_COVER, colorCover);
|
||||
shader_uniform_texture_set(shader, TEXTURE_QUAD_UNIFORM_TEXTURE, texture, 0);
|
||||
|
||||
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
|
||||
|
||||
vao_unbind();
|
||||
|
||||
}
|
35
src/game/render/texture_quad.h
Normal file
35
src/game/render/texture_quad.h
Normal file
@ -0,0 +1,35 @@
|
||||
#pragma once
|
||||
|
||||
#include "RENDER_COMMON.h"
|
||||
|
||||
#define TEXTURE_QUAD_UNIFORM_COLOR "u_color"
|
||||
#define TEXTURE_QUAD_UNIFORM_COLOR_COVER "u_colorCover"
|
||||
#define TEXTURE_QUAD_UNIFORM_TRANSFORM "u_transform"
|
||||
#define TEXTURE_QUAD_UNIFORM_MODEL "u_model"
|
||||
#define TEXTURE_QUAD_UNIFORM_VIEW "u_view"
|
||||
#define TEXTURE_QUAD_UNIFORM_PROJECTION "u_projection"
|
||||
#define TEXTURE_QUAD_UNIFORM_SIZE "u_size"
|
||||
#define TEXTURE_QUAD_UNIFORM_TEXTURE "u_texture"
|
||||
|
||||
void texture_quad_draw
|
||||
(
|
||||
Texture* texture,
|
||||
Renderer* renderer,
|
||||
Shader* shader,
|
||||
vec2 uvMin,
|
||||
vec2 uvMax,
|
||||
mat4 model,
|
||||
mat4 view,
|
||||
mat4 projection,
|
||||
vec2 size,
|
||||
vec4 color,
|
||||
vec4 colorCover,
|
||||
Flip flip
|
||||
);
|
||||
|
||||
#define TEXTURE_QUAD_COLOR_DEFAULT (f32*)OPAQUE
|
||||
|
||||
static const vec2 TEXTURE_QUAD_UV_MIN_DEFAULT = {0.0f, 0.0f};
|
||||
static const vec2 TEXTURE_QUAD_UV_MAX_DEFAULT = {1.0f, 1.0f};
|
||||
static const Flip TEXTURE_QUAD_FLIP_DEFAULT = FLIP_NONE;
|
||||
static const Origin TEXTURE_QUAD_ORIGIN_DEFAULT = ORIGIN_TOP_LEFT;
|
Reference in New Issue
Block a user