#ifndef GLERMINAL_H #define GLERMINAL_H #ifdef __cplusplus extern "C" { #endif enum { GLERMINAL_CELL_SIZE = 8, GLERMINAL_CELL_AREA = GLERMINAL_CELL_SIZE * GLERMINAL_CELL_SIZE }; typedef void (*glerminal_init_cb)(); typedef void (*glerminal_main_cb)(float dt); typedef struct glerminal_sprite { unsigned char data[GLERMINAL_CELL_AREA]; } glerminal_sprite; /** * @brief Call init once, then run the application's mainloop * @param main main calllback */ void glerminal_run(glerminal_init_cb init, glerminal_main_cb main); /** * @brief Update the displayed screen contents to the current state of the library */ void glerminal_flush(); /** * @brief Set a cell's sprite * @param x position of the cell in the range [0, 32) * @param y position of the cell in the range [0, 20) * @param layer layer of the cell in the range [0, 16) * @param sprite sprite's index in the range [0, 256) */ void glerminal_set(unsigned char x, unsigned char y, unsigned char layer, unsigned char sprite); /** * @brief Get a cell's sprite * @param x position of the cell in the range [0, 32) * @param y position of the cell in the range [0, 20) * @param layer layer of the cell in the range [0, 16) * @return sprite index currently assigned to the cell */ unsigned char glerminal_get(unsigned char x, unsigned char y, unsigned char layer); /** * @brief Upload sprite to the given sprite ID * @param id The ID of the sprite to change * @param sprite The new sprite */ void glerminal_update_sprite(unsigned char id, glerminal_sprite sprite); /** * @brief Update palette color at index ID * @param id Palette index to update * @param color New color */ void glerminal_update_palette(unsigned char id, unsigned int color); #ifdef __cplusplus } #endif #endif//GLERMINAL_H