diff options
author | nathansmith117 <nathansmith117@sdf.org> | 2025-02-03 13:46:19 +0000 |
---|---|---|
committer | nathansmith117 <nathansmith117@sdf.org> | 2025-02-03 13:46:19 +0000 |
commit | 305c224104be6558f2ece595a47cf29348b60d66 (patch) | |
tree | f36af90ce04dade5b520a24c77176ca7ebb4ef65 /src/sldj.c | |
download | sldj-305c224104be6558f2ece595a47cf29348b60d66.tar.gz sldj-305c224104be6558f2ece595a47cf29348b60d66.tar.bz2 sldj-305c224104be6558f2ece595a47cf29348b60d66.zip |
first commit
Diffstat (limited to 'src/sldj.c')
-rw-r--r-- | src/sldj.c | 68 |
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(); +} + |