Extract shader into its own header

This commit is contained in:
Abdelrahman Said 2024-08-18 01:53:49 +01:00
parent d34c04e157
commit 6d6d4781ff
4 changed files with 24 additions and 18 deletions

View File

@ -26,7 +26,7 @@ enum {
internal M4x4f get_projection_matrix(ProjectionType projection_type);
internal V3f main_shader_vertex(const V3f *vertex, M4x4f *model_view,
M4x4f *projection, const Render *render);
M4x4f *projection, const Image *img);
int main(void) {
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,
M4x4f *projection, const Render *render) {
M4x4f *projection, const Image *img) {
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.y = 0.0 - vh.y;
vh = mat4x4_mul_vec4(
viewport(vh.x, vh.y, render->img.width, render->img.height), vh);
vh = mat4x4_mul_vec4(viewport(vh.x, vh.y, img->width, img->height), vh);
return project_vec4(vh);
}

View File

@ -162,7 +162,7 @@ internal void render_triangle(const Triangle *triangle, const Model *model,
for (u64 i = 0; i < TRIANGLE_VERTICES; ++i) {
vertices[i] = shader->vertex(&vertices[i], shader->model_view,
shader->projection, render);
shader->projection, &render->img);
}
if (render_type == RENDER_TYPE_WIREFRAME) {

View File

@ -4,8 +4,8 @@
#include "aliases.h"
#include "img.h"
#include "mem_arena.h"
#include "shader.h"
#include "typed_list.h"
#include "vec.h"
#define INVALID_MODEL ((Model){0})
#define IS_INVALID_MODEL(m) (m.vertices == NULL || m.triangles == NULL)
@ -55,18 +55,6 @@ struct render {
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);
bool init_render(Arena *arena, Render *render, u64 width, u64 height);
void render_model(const Model *model, Render *render, const Shader *shader,

19
src/shader.h Normal file
View 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