summaryrefslogtreecommitdiff
path: root/graphics.c
diff options
context:
space:
mode:
Diffstat (limited to 'graphics.c')
-rw-r--r--graphics.c37
1 files changed, 28 insertions, 9 deletions
diff --git a/graphics.c b/graphics.c
index d5f16e4..0207ac2 100644
--- a/graphics.c
+++ b/graphics.c
@@ -2,6 +2,9 @@
* gcc -std=c99 *.c -lm && ./a.out | ffmpeg -r 30 -i - output.mp4
*/
+#include "AnimationRender/AnimationRender.h"
+#include "AnimationRender/F_Draw.h"
+#include "AnimationRender/F_Interpolate.h"
#include "FrameRender/FrameRender.h"
#include "FrameRender/P_Checker.h"
#include "FrameRender/P_Circle.h"
@@ -9,13 +12,16 @@
#include "FrameRender/P_Square.h"
#include "FrameRender/P_TransformCenter.h"
#include "FrameRender/P_TransformRotate.h"
+#include "FrameRender/PixelCallback.h"
#include "RGBImage.h"
-#include "math.h"
#include <stdlib.h>
+# define M_PI 3.14159265358979323846 /* pi */
+
int
main() {
- RGBImage frame = RGBImage_new(512, 512);
+ u32 width = 512;
+ u32 height = 512;
RGBImage bclc = ppm_read(fopen("bclc.ppm", "rb"));
@@ -24,28 +30,28 @@ main() {
.squareSize = 64, .colorA = 0xFF000000, .colorB = 0xFFFF00FF,
}),
TransformCenter_setup((TransformCenter){
- .centerX = frame.width / 2, .centerY = frame.height / 2,
+ .centerX = width / 2, .centerY = height / 2,
}),
Square_setup((Square){
.width = 100, .height = 100, .color = 0xFFFFFF00,
}),
NULL,
TransformRotate_setup((TransformRotate){
- .angle = M_PI_4 / 2,
+ .angle = M_PI / 8,
}),
Square_setup((Square){
.width = 200, .height = 200, .color = 0xFF00FFFF,
}),
NULL,
TransformCenter_setup((TransformCenter){
- .centerX = frame.width * 3/4, .centerY = frame.height / 2,
+ .centerX = width * 3/4, .centerY = height / 2,
}),
Circle_setup((Circle){
.radius = 50, .color = 0x80FFFFFF,
}),
NULL,
TransformCenter_setup((TransformCenter){
- .centerX = frame.width / 8, .centerY = frame.height * 3/5,
+ .centerX = width / 8, .centerY = height * 3/5,
}),
Image_setup((Image){
.img = bclc,
@@ -54,10 +60,23 @@ main() {
};
u32 sizeCallbacks = sizeof(callbacks) / sizeof(*callbacks);
- RenderFrame(frame, (const PixelCallback**)callbacks, sizeCallbacks);
- ppm6_write(stdout, frame);
+ TransformCenter img1 = { .centerX = width / 8, .centerY = height * 3/5 },
+ img2 = { .centerX = height * 3/5, .centerY = width / 8 };
+ const FrameCallback* frameCallbacks[] = {
+ Interpolate_setup((Interpolate){
+ .startValue = &img1, .endValue = &img2,
+ .value = callbacks[10]->callback_self,
+ .interpolate = (f_interpolate)Interpolate_TransformCenter,
+ }),
+ Draw_setup((Draw){
+ .startFrame = 0, .endFrame = 150,
+ .callbacks = (const PixelCallback**)callbacks, .sizeCallbacks = sizeCallbacks,
+ }),
+ };
+ u32 sizeFrameCallbacks = sizeof(frameCallbacks) / sizeof(*frameCallbacks);
+
+ RenderAnimation(width, height, 150, frameCallbacks, sizeFrameCallbacks);
- RGBImage_delete(&frame);
RGBImage_delete(&bclc);
for (u32 i = 0; i < sizeCallbacks; ++i) {
if (callbacks[i] == NULL) continue;