aboutsummaryrefslogtreecommitdiff
path: root/src/state.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/state.c')
-rw-r--r--src/state.c30
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();
}