summaryrefslogtreecommitdiff
path: root/src/blender
diff options
context:
space:
mode:
Diffstat (limited to 'src/blender')
-rw-r--r--src/blender/blender.c39
-rw-r--r--src/blender/canvas.c23
-rw-r--r--src/blender/color.c8
3 files changed, 0 insertions, 70 deletions
diff --git a/src/blender/blender.c b/src/blender/blender.c
deleted file mode 100644
index 08cafa4..0000000
--- a/src/blender/blender.c
+++ /dev/null
@@ -1,39 +0,0 @@
1#include "blender/blender.h"
2#include <assert.h>
3#include <math.h>
4
5static inline ColorComponent blend_components(ColorComponent origin, ColorComponent target, TimeVector frame) {
6 // https://www.youtube.com/watch?v=LKnqECcg6Gw
7 return (ColorComponent) sqrt((TIME_UNIT - frame) * pow(origin, 2) + frame * pow(target, 2));
8}
9
10static inline Color blend_colors(Color origin, Color target, TimeVector frame) {
11 return (Color) {{blend_components(origin.rgba.r, target.rgba.r, frame),
12 blend_components(origin.rgba.g, target.rgba.g, frame),
13 blend_components(origin.rgba.b, target.rgba.b, frame),
14 blend_components(origin.rgba.a, target.rgba.a, frame)}};
15}
16
17void blender_blend_canvas(Canvas *canvas, Canvas *source, Canvas *target, Morphing *morphing, TimeVector frame) {
18 IntVector flat_dim;
19 CartesianVector dim, point;
20 CartesianMapping mapping;
21 Color pixel;
22
23 dim = morphing->dim;
24
25 assert(dim.x > 0 && dim.y > 0);
26 assert(vector_equals(dim, canvas_get_dim(canvas)));
27 assert(vector_equals(dim, canvas_get_dim(source)));
28 assert(vector_equals(dim, canvas_get_dim(target)));
29 assert(frame >= TIME_ORIGIN && frame <= TIME_UNIT);
30
31 for (flat_dim = (dim.x - 1) * (dim.y - 1); flat_dim >= 0; --flat_dim) {
32 point.x = flat_dim % dim.y;
33 point.y = flat_dim / dim.y;
34
35 mapping = (CartesianMapping) {point, point};
36 pixel = blend_colors(canvas_get_pixel(source, mapping.origin), canvas_get_pixel(target, mapping.target), frame);
37 canvas_set_pixel(canvas, point, pixel);
38 }
39}
diff --git a/src/blender/canvas.c b/src/blender/canvas.c
deleted file mode 100644
index b7cd9dc..0000000
--- a/src/blender/canvas.c
+++ /dev/null
@@ -1,23 +0,0 @@
1#include "blender/canvas.h"
2
3void canvas_init(Canvas *canvas, IntVector width, IntVector height) {
4 canvas->mlv = MLV_create_image(width, height);
5}
6
7void canvas_free(Canvas *canvas) {
8 MLV_free_image(canvas->mlv);
9}
10
11void canvas_set_pixel(Canvas *canvas, CartesianVector position, Color color) {
12 MLV_set_pixel_on_image(position.x, position.y, color.mlv, canvas->mlv);
13}
14
15Color canvas_get_pixel(Canvas *canvas, CartesianVector position) {
16 int r, g, b, a;
17 MLV_get_pixel_on_image(canvas->mlv, position.x, position.y, &r, &g, &b, &a);
18 return (Color) {{r, g, b, a}};
19}
20
21CartesianVector canvas_get_dim(Canvas *canvas) {
22 return (CartesianVector) {MLV_get_image_width(canvas->mlv), MLV_get_image_height(canvas->mlv)};
23}
diff --git a/src/blender/color.c b/src/blender/color.c
deleted file mode 100644
index f92fba9..0000000
--- a/src/blender/color.c
+++ /dev/null
@@ -1,8 +0,0 @@
1#include "blender/color.h"
2
3bool color_equals(Color c1, Color c2) {
4 return c1.rgba.r == c2.rgba.r &&
5 c1.rgba.g == c2.rgba.g &&
6 c1.rgba.b == c2.rgba.b &&
7 c1.rgba.a == c2.rgba.a;
8}