From 305c224104be6558f2ece595a47cf29348b60d66 Mon Sep 17 00:00:00 2001 From: nathansmith117 Date: Mon, 3 Feb 2025 06:46:19 -0700 Subject: first commit --- src/sldj.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/sldj.c (limited to 'src/sldj.c') 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(); +} + -- cgit v1.2.3