#include "sldj.h" void initSldj(Sldj* sldj) { // Create window. InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Scanline DJ"); SetWindowState(FLAG_WINDOW_RESIZABLE); SetTargetFPS(DEFAULT_FRAME_RATE); sldj->viewport = LoadRenderTexture(DEFAULT_SCREEN_WIDTH, DEFAULT_SCREEN_HEIGHT); sldj->frameCounter = 0; sldj->xCount = UINT16_MAX / DEFAULT_SCREEN_WIDTH; sldj->yCount = UINT16_MAX / DEFAULT_SCREEN_HEIGHT; // Scripting. initScripting(&sldj->scripting); sldj->scriptFilepath[0] = '\0'; } void updateSldj(Sldj* sldj) { BeginDrawing(); // Scan image. BeginTextureMode(sldj->viewport); if (sldj->scripting.lineScanner != NULL) { uint16_t xScan = 0; uint16_t yScan = 0; for (int y = 0; y < sldj->viewport.texture.height; ++y) { xScan = 0; for (int x = 0; x < sldj->viewport.texture.width; ++x) { DrawPixel(x, y, sldj->scripting.lineScanner(xScan, yScan, sldj->frameCounter)); xScan += sldj->xCount; } yScan += sldj->yCount; } } EndTextureMode(); ClearBackground(DARKGRAY); // Draw scanned image. Texture viewport = sldj->viewport.texture; DrawTexturePro( viewport, (Rectangle){0.0, 0.0, viewport.width, viewport.height}, (Rectangle){0.0, 0.0, GetScreenWidth(), GetScreenHeight()}, (Vector2){0.0, 0.0}, 0.0, WHITE ); DrawFPS(0, 0); if (IsKeyPressed(KEY_R)) { reloadScript(sldj); } EndDrawing(); ++sldj->frameCounter; } void closeSldj(Sldj* sldj) { UnloadRenderTexture(sldj->viewport); closeScripting(&sldj->scripting); CloseWindow(); } void resetViewport(Sldj* sldj, int width, int height) { UnloadRenderTexture(sldj->viewport); sldj->viewport = LoadRenderTexture(width, height); sldj->xCount = UINT16_MAX / width; sldj->yCount = UINT16_MAX / height; } void reloadScriptContext(Sldj* sldj) { } void reloadScript(Sldj* sldj) { if (sldj->scriptFilepath[0] != '\0') { compileScript(&sldj->scripting, sldj->scriptFilepath); } }