Tweak fragment shader to take and return V4f instead of Colour

This commit is contained in:
2024-09-14 01:22:43 +01:00
parent 390ab7c3b4
commit 87f6b2b87a
8 changed files with 54 additions and 33 deletions

View File

@@ -6,6 +6,7 @@
#include "typed_list.h"
#include "utils.h"
#include "vec.h"
#include <stdint.h>
#include <math.h>
typedef struct triangle_bbox TriangleBBox;
@@ -51,7 +52,7 @@ void render_model(const Model *model, Render *render, ShaderID shader,
}
internal void render_triangle(const Triangle *triangle, const Model *model, ShaderID shader,
Render *render, RenderType render_type, Colour colour) {
Render *render, RenderType render_type, Colour colour) {
Image *img = &(render->img);
VertexData vertices[TRIANGLE_VERTICES];
for (u64 i = 0; i < TRIANGLE_VERTICES; ++i) {
@@ -92,6 +93,8 @@ internal void fill_triangle(Render *render, ShaderID shader, VertexData vertices
V3f coords;
f32 z;
f32 zbuf;
V4f shader_colour;
Colour output_colour;
FragmentResult result;
f32 intensity = 1.0f;
@@ -114,13 +117,21 @@ internal void fill_triangle(Render *render, ShaderID shader, VertexData vertices
continue;
}
result = run_fragment_shader(shader, &coords, &colour, model);
shader_colour = (V4f){.r = colour.r, .g = colour.g, .b = colour.b, .a = colour.a};
result = run_fragment_shader(shader, &coords, &shader_colour, model);
if (DISCARD_FRAGMENT(result)) {
continue;
}
output_colour = (Colour){
.r = clamp(result.colour.r, 0, UINT8_MAX),
.g = clamp(result.colour.g, 0, UINT8_MAX),
.b = clamp(result.colour.b, 0, UINT8_MAX),
.a = clamp(result.colour.a, 0, UINT8_MAX),
};
set_pixel(depth, x, y, &z);
set_pixel(img, x, y, &result.colour);
set_pixel(img, x, y, &output_colour);
}
}
}