aboutsummaryrefslogtreecommitdiffstats
path: root/src/sldj.c
diff options
context:
space:
mode:
authornathansmith117 <nathansmith117@sdf.org>2025-02-03 13:46:19 +0000
committernathansmith117 <nathansmith117@sdf.org>2025-02-03 13:46:19 +0000
commit305c224104be6558f2ece595a47cf29348b60d66 (patch)
treef36af90ce04dade5b520a24c77176ca7ebb4ef65 /src/sldj.c
downloadsldj-305c224104be6558f2ece595a47cf29348b60d66.tar.gz
sldj-305c224104be6558f2ece595a47cf29348b60d66.tar.bz2
sldj-305c224104be6558f2ece595a47cf29348b60d66.zip
first commit
Diffstat (limited to 'src/sldj.c')
-rw-r--r--src/sldj.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/sldj.c b/src/sldj.c
new file mode 100644
index 0000000..a2b0c47
--- /dev/null
+++ b/src/sldj.c
@@ -0,0 +1,68 @@
+#include "sldj.h"
+
+void initSldj(Sldj* sldj)
+{
+ InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Scanline DJ");
+ SetWindowState(FLAG_WINDOW_RESIZABLE);
+ SetTargetFPS(FRAME_RATE);
+
+ sldj->screenTexture = LoadRenderTexture(SCREEN_WIDTH, SCREEN_HEIGHT);
+ sldj->frameCounter = 0;
+}
+
+uint16_t noise = 0;
+
+Color scanPoint(uint16_t x, uint16_t y, int frame)
+{
+ noise ^= frame;
+ noise ^= x ^ y;
+ return (Color){.r = (y >> (6 - noise)) ^ (frame << 4), .g = noise >> x, .b = 0, .a = 255};
+}
+
+void updateSldj(Sldj* sldj)
+{
+ BeginDrawing();
+
+ // Scan image.
+ BeginTextureMode(sldj->screenTexture);
+
+ uint16_t xScaled = 0;
+ uint16_t yScaled = 0;
+
+ for (uint16_t y = 0; y < SCREEN_HEIGHT; ++y)
+ {
+ xScaled = 0;
+
+ for (uint16_t x = 0; x < SCREEN_WIDTH; ++x)
+ {
+ DrawPixel(x, y, scanPoint(xScaled, yScaled, sldj->frameCounter));
+ xScaled += 65536 / SCREEN_WIDTH;
+ }
+
+ yScaled += 65536 / SCREEN_HEIGHT;
+ }
+
+ EndTextureMode();
+
+ // Draw scanned image.
+ DrawTexturePro(
+ sldj->screenTexture.texture,
+ (Rectangle){0.0, 0.0, SCREEN_WIDTH, SCREEN_HEIGHT},
+ (Rectangle){0.0, 0.0, SCREEN_WIDTH, SCREEN_HEIGHT},
+ (Vector2){0.0, 0.0},
+ 0.0,
+ WHITE
+ );
+
+ EndDrawing();
+
+ ++sldj->frameCounter;
+}
+
+void closeSldj(Sldj* sldj)
+{
+ UnloadRenderTexture(sldj->screenTexture);
+
+ CloseWindow();
+}
+