diff options
Diffstat (limited to 'src/state.c')
| -rw-r--r-- | src/state.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/state.c b/src/state.c index 395d590..c1bdacb 100644 --- a/src/state.c +++ b/src/state.c @@ -1,9 +1,13 @@ #include "config.h" #include "mandel.h" +#define MANDEL_FONT_PATH "font/00_starmap.ttf" +#define MANDEL_FONT_SIZE 12 + bool state_init(State *state) { SDL_CALL(SDL_Init(SDL_INIT_VIDEO)); + TTF_CALL(TTF_Init()); SDL_CALL(state->window = SDL_CreateWindow( MANDEL_WINDOW_TITLE, SDL_WINDOWPOS_UNDEFINED, @@ -20,15 +24,20 @@ bool state_init(State *state) MANDEL_WINDOW_WIDTH, MANDEL_WINDOW_HEIGHT )); + TTF_CALL(state->font = TTF_OpenFont(MANDEL_FONT_PATH, MANDEL_FONT_SIZE)); + state->iterations = MANDEL_ITERATIONS; + state->texture_iterations = text_texture_new(state, "iterations: %d", state->iterations); + state->texture_time = text_texture_new(state, "time: 0ms"); + state->texture_center = text_texture_new(state, "center: 0i + 0"); state->palette = color_palette_new(NULL, MANDEL_ITERATIONS); if (state->palette == NULL) return false; - state->iterations = MANDEL_ITERATIONS; state->real_start = -2.0; state->real_end = 2.0; state->imag_start = -2.0; state->imag_end = 2.0; state->running = true; + state->info = false; return true; } @@ -62,8 +71,7 @@ void state_run(State *state) for (int j = 0; j < width; j++) { int n = mandelbrot(real, imag, state->iterations); - Color c = state->palette[n]; - ((Color*)pixels)[i * width + j] = c; + ((Color*)pixels)[i * width + j] = state->palette[n]; real += real_step; } imag += imag_step; @@ -71,11 +79,16 @@ void state_run(State *state) uint32_t render_end_time = SDL_GetTicks(); - printf("%ums\r", (render_end_time - render_start_time)); - fflush(stdout); - SDL_UnlockTexture(state->texture); SDL_CALL(SDL_RenderCopy(state->renderer, state->texture, NULL, NULL)); + if (state->info) + { + TEXT_TEXTURE_UPDATE(state, state->texture_time, "time: %u", render_end_time - render_start_time); + text_render(state, state->texture_center, 10, 10, 200, 12); + text_render(state, state->texture_iterations, 10, 30, 90, 12); + text_render(state, state->texture_time, 10, 50, 45, 12); + } + SDL_RenderPresent(state->renderer); SDL_Delay(3); } @@ -84,8 +97,13 @@ void state_run(State *state) void state_quit(State *state) { free(state->palette); + TTF_CloseFont(state->font); + SDL_DestroyTexture(state->texture_iterations); + SDL_DestroyTexture(state->texture_center); + SDL_DestroyTexture(state->texture_time); SDL_DestroyTexture(state->texture); SDL_DestroyRenderer(state->renderer); SDL_DestroyWindow(state->window); + TTF_Quit(); SDL_Quit(); } |
