From 0391e4b7ac374bf210be79db66d188494ed2dd45 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Fri, 11 Jun 2021 22:13:47 +0200 Subject: Load all assets on VRAM at init --- src/sequencer.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/sequencer.c b/src/sequencer.c index efec779..6859ba5 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -14,9 +14,9 @@ // Theme colors. #define COL_CURSOR COL_BLUE -#define COL_NOTE_PRESSED COL_BLUE -#define COL_CURRENT_CHANNEL COL_FG -#define COL_CURRENT_TRIG COL_FG +#define COL_NOTE_PRESSED COL_GREY +#define COL_CURRENT_CHANNEL COL_GREY +#define COL_CURRENT_TRIG COL_GREY #define COL_WAVE_A COL_RED #define COL_WAVE_B COL_CYAN @@ -24,7 +24,13 @@ // Assets. // -#define ASSETS_DATA ((u32*)(MEM_VRAM + KB(32))) +#define N_TILES_NOTE_NAMES 73 * 2 +#define N_TILES_CHAN_BTSN 4 * 3 +#define N_TILES_WAVE_BTNS 4 * 2 + +#define ASSETS_NOTE_NAMES ((u32*)(MEM_VRAM + KB(32))) +#define ASSETS_CHANNEL_BUTTONS (ASSETS_NOTE_NAMES + (N_TILES_NOTE_NAMES * 8)) +#define ASSETS_DEFAULT_WAVES (ASSETS_CHANNEL_BUTTONS + (N_TILES_CHAN_BTSN * 8)) static const u32 note_names[] = { 0x000000e0, 0x202020e0, 0x0000000e, 0x080e020e, @@ -341,7 +347,7 @@ draw_trigger(size_t chan, size_t i) { size_t offset_y = i < 8 ? 0 : TRIG_OFFSET_Y; size_t x = TRIG_START_X + offset_x; size_t y = TRIG_START_Y + offset_y; - Tile *tiles = ASSETS_DATA; + Tile *tiles = ASSETS_NOTE_NAMES; tiles += 2 * trig.note; draw_tile(x, y, tiles, COL_FG, true); draw_tile(x + 8, y, tiles + 1, COL_FG, true); @@ -389,8 +395,7 @@ void draw_channels(void) { // Contains 5 channel buttons: Ch. 1-4 + FM. We are only drawing the DMG // channels for now, since FM may take some time to develop. - Tile channel_tiles[3 * 4] = {0}; - unpack_tiles(channel_buttons, channel_tiles, 3 * 4); + Tile *channel_tiles = ASSETS_CHANNEL_BUTTONS; size_t k = 0; for (size_t i = 0; i < 4; i++) { bool active = false; @@ -669,10 +674,6 @@ void draw_parameters_ch3(void) { clear_parameters(); - // TODO: Move to VRAM and decompress at the beginning. - Tile wave_tiles[4 * 2] = {0}; - unpack_tiles(default_wave_buttons, wave_tiles, 4 * 2); - // Draw current wave data. { u8 *wave_a = ch3.params[trig_selection_loc].wave_a; @@ -709,6 +710,7 @@ draw_parameters_ch3(void) { // Draw default wave buttons. { + Tile *wave_tiles = ASSETS_DEFAULT_WAVES; size_t x = PARAMS_START_X; size_t y = PARAMS_START_Y + PARAMS_H - 7; for (size_t i = 0, k = 0; i < 4 * 2; i += 2, k++) { @@ -1387,14 +1389,16 @@ handle_sequencer_input(void) { } void -load_note_names(void) { - unpack_tiles(note_names, ASSETS_DATA, 2 * 73); +load_assets(void) { + unpack_tiles(note_names, ASSETS_NOTE_NAMES, N_TILES_NOTE_NAMES); + unpack_tiles(channel_buttons, ASSETS_CHANNEL_BUTTONS, N_TILES_CHAN_BTSN); + unpack_tiles(default_wave_buttons, ASSETS_DEFAULT_WAVES, N_TILES_WAVE_BTNS); } void sequencer_init(void) { // Unpack non-sprite tiles directly on the VRAM. - load_note_names(); + load_assets(); // Initialize background objects and sprites. draw_triggers(); -- cgit v1.2.1