summaryrefslogtreecommitdiff
path: root/src/core/shader.c
blob: fe254084e87f0f8c958e02d46cce1c389e57a3cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "shader.h"
#include "vert.h"
#include "device.h"

void ssrS_bcpcolor(Vec3* bc, Color A, Color B, Color C, Color* out) {
	ssr_assert(bc && out);
	*out = ssr_color(
		bc->A * COLOR_R(A) + bc->B * COLOR_R(B) + bc->C * COLOR_R(C),
		bc->A * COLOR_G(A) + bc->B * COLOR_G(B) + bc->C * COLOR_G(C),
		bc->A * COLOR_B(A) + bc->B * COLOR_B(B) + bc->C * COLOR_B(C),
		bc->A * COLOR_A(A) + bc->B * COLOR_A(B) + bc->C * COLOR_A(C)
	);
}

void ssrS_bcpvec2(Vec3* bc, Vec2* A, Vec2* B, Vec2* C, Vec2* out) {
	ssr_assert(bc && A && B && C && out);
	out->x = bc->A * A->x + bc->B * B->x + bc->C * C->x;
	out->y = bc->A * A->y + bc->B * B->y + bc->C * C->y;
}

void ssrS_bcpvec3(Vec3* bc, Vec3* A, Vec3* B, Vec3* C, Vec3* out) {
	ssr_assert(bc && A && B && C && out);
	out->x = bc->A * A->x + bc->B * B->x + bc->C * C->x;
	out->y = bc->A * A->y + bc->B * B->y + bc->C * C->y;
	out->z = bc->A * A->z + bc->B * B->z + bc->C * C->z;
}

void ssrS_bcpvec4(Vec3* bc, Vec4* A, Vec4* B, Vec4* C, Vec4* out) {
	ssr_assert(bc && A && B && C && out);
	out->x = bc->A * A->x + bc->B * B->x + bc->C * C->x;
	out->y = bc->A * A->y + bc->B * B->y + bc->C * C->y;
	out->z = bc->A * A->z + bc->B * B->z + bc->C * C->z;
	out->w = bc->A * A->w + bc->B * B->w + bc->C * C->w;
}