Tweak fragment shader to take and return V4f instead of Colour
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user