Extract shader into its own header
This commit is contained in:
parent
d34c04e157
commit
6d6d4781ff
@ -26,7 +26,7 @@ enum {
|
|||||||
|
|
||||||
internal M4x4f get_projection_matrix(ProjectionType projection_type);
|
internal M4x4f get_projection_matrix(ProjectionType projection_type);
|
||||||
internal V3f main_shader_vertex(const V3f *vertex, M4x4f *model_view,
|
internal V3f main_shader_vertex(const V3f *vertex, M4x4f *model_view,
|
||||||
M4x4f *projection, const Render *render);
|
M4x4f *projection, const Image *img);
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
Arena *arena = NULL;
|
Arena *arena = NULL;
|
||||||
@ -82,12 +82,11 @@ internal M4x4f get_projection_matrix(ProjectionType projection_type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal V3f main_shader_vertex(const V3f *vertex, M4x4f *model_view,
|
internal V3f main_shader_vertex(const V3f *vertex, M4x4f *model_view,
|
||||||
M4x4f *projection, const Render *render) {
|
M4x4f *projection, const Image *img) {
|
||||||
V4f vh = {.x = vertex->x, .y = vertex->y, .z = vertex->z, .w = 1.0f};
|
V4f vh = {.x = vertex->x, .y = vertex->y, .z = vertex->z, .w = 1.0f};
|
||||||
vh = mat4x4_mul_vec4((*projection), mat4x4_mul_vec4((*model_view), vh));
|
vh = mat4x4_mul_vec4((*projection), mat4x4_mul_vec4((*model_view), vh));
|
||||||
vh.y = 0.0 - vh.y;
|
vh.y = 0.0 - vh.y;
|
||||||
vh = mat4x4_mul_vec4(
|
vh = mat4x4_mul_vec4(viewport(vh.x, vh.y, img->width, img->height), vh);
|
||||||
viewport(vh.x, vh.y, render->img.width, render->img.height), vh);
|
|
||||||
|
|
||||||
return project_vec4(vh);
|
return project_vec4(vh);
|
||||||
}
|
}
|
||||||
|
@ -162,7 +162,7 @@ internal void render_triangle(const Triangle *triangle, const Model *model,
|
|||||||
|
|
||||||
for (u64 i = 0; i < TRIANGLE_VERTICES; ++i) {
|
for (u64 i = 0; i < TRIANGLE_VERTICES; ++i) {
|
||||||
vertices[i] = shader->vertex(&vertices[i], shader->model_view,
|
vertices[i] = shader->vertex(&vertices[i], shader->model_view,
|
||||||
shader->projection, render);
|
shader->projection, &render->img);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (render_type == RENDER_TYPE_WIREFRAME) {
|
if (render_type == RENDER_TYPE_WIREFRAME) {
|
||||||
|
14
src/obj.h
14
src/obj.h
@ -4,8 +4,8 @@
|
|||||||
#include "aliases.h"
|
#include "aliases.h"
|
||||||
#include "img.h"
|
#include "img.h"
|
||||||
#include "mem_arena.h"
|
#include "mem_arena.h"
|
||||||
|
#include "shader.h"
|
||||||
#include "typed_list.h"
|
#include "typed_list.h"
|
||||||
#include "vec.h"
|
|
||||||
|
|
||||||
#define INVALID_MODEL ((Model){0})
|
#define INVALID_MODEL ((Model){0})
|
||||||
#define IS_INVALID_MODEL(m) (m.vertices == NULL || m.triangles == NULL)
|
#define IS_INVALID_MODEL(m) (m.vertices == NULL || m.triangles == NULL)
|
||||||
@ -55,18 +55,6 @@ struct render {
|
|||||||
Depth depth;
|
Depth depth;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef V3f(VertexShader)(const V3f *vertex, M4x4f *model_view,
|
|
||||||
M4x4f *projection, const Render *render);
|
|
||||||
typedef bool(FragmentShader)(Colour colour);
|
|
||||||
|
|
||||||
typedef struct shader Shader;
|
|
||||||
struct shader {
|
|
||||||
VertexShader *vertex;
|
|
||||||
FragmentShader *fragment;
|
|
||||||
M4x4f *model_view;
|
|
||||||
M4x4f *projection;
|
|
||||||
};
|
|
||||||
|
|
||||||
Model load_obj_file(Arena *arena, const char *filename, const char *texture);
|
Model load_obj_file(Arena *arena, const char *filename, const char *texture);
|
||||||
bool init_render(Arena *arena, Render *render, u64 width, u64 height);
|
bool init_render(Arena *arena, Render *render, u64 width, u64 height);
|
||||||
void render_model(const Model *model, Render *render, const Shader *shader,
|
void render_model(const Model *model, Render *render, const Shader *shader,
|
||||||
|
19
src/shader.h
Normal file
19
src/shader.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef SHADER_H
|
||||||
|
#define SHADER_H
|
||||||
|
|
||||||
|
#include "img.h"
|
||||||
|
#include "vec.h"
|
||||||
|
|
||||||
|
typedef V3f(VertexShader)(const V3f *vertex, M4x4f *model_view,
|
||||||
|
M4x4f *projection, const Image *img);
|
||||||
|
typedef bool(FragmentShader)(Colour colour);
|
||||||
|
|
||||||
|
typedef struct shader Shader;
|
||||||
|
struct shader {
|
||||||
|
VertexShader *vertex;
|
||||||
|
FragmentShader *fragment;
|
||||||
|
M4x4f *model_view;
|
||||||
|
M4x4f *projection;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SHADER_H
|
Loading…
Reference in New Issue
Block a user