DEVELOPMENT ENVIRONMENT

~alex/mandelbrot-set-gen

5ce56c337bfc58b08382aef46ab299c1546fec16 — Alejandro Laguna a month ago 797e30a
refactor: separate SDL init to a diff function
2 files changed, 34 insertions(+), 15 deletions(-)

M include/mandelbrot.h
M src/main.c
M include/mandelbrot.h => include/mandelbrot.h +6 -0
@@ 18,6 18,12 @@ typedef struct position_s {
    double y_max;
} position_t;

typedef struct state_s {
    SDL_Window* window;
    SDL_Surface* surface;
    SDL_Renderer* renderer;
} state_t;

// math.c
int mandelbrot_iterations(double cr, double ci, int max_iter);
void calculate_points(position_t* pos);

M src/main.c => src/main.c +28 -15
@@ 14,39 14,52 @@

extern int points[WINDOW_WIDTH * WINDOW_HEIGHT];

int main(void) {
state_t* init() {
    state_t *state = malloc(sizeof(state_t));
    if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS)) {
        fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
        return -1;
        return NULL;
    }

    SDL_Window* window =
        SDL_CreateWindow(WINDOW_TITLE, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_HIDDEN);
    if (window == NULL) {
        fprintf(stderr, "CreateWindow failed: %s\n", SDL_GetError());
        SDL_Quit();
        return -1;
        free(state);
        return NULL;
    }

    SDL_Surface* surface = SDL_GetWindowSurface(window);
    if (!surface) {
        fprintf(stderr, "GetWindowSurface failed: %s\n", SDL_GetError());
        SDL_DestroyWindow(window);
        SDL_Quit();
        return -1;
        free(state);
        return NULL;
    }

    SDL_Renderer* renderer = SDL_CreateSoftwareRenderer(surface);
    if (renderer == NULL) {
        fprintf(stderr, "CreateSoftwareRenderer failed: %s\n", SDL_GetError());
        SDL_DestroyWindow(window);
        SDL_DestroySurface(surface);
        SDL_Quit();
        free(state);
        return NULL;
    }
    state->window = window;
    state->surface = surface;
    state->renderer = renderer;
    return state;
}

int main(void) {
    state_t *state = init();
    if (state == NULL) {
        return -1;
    }

    SDL_Event e;
    bool running = true;
    SDL_ShowWindow(window);
    SDL_ShowWindow(state->window);

    position_t position;
    position.x_min = -2.0;


@@ 146,17 159,17 @@ int main(void) {
            calculate_points(&position);
            pos_updated = false;
        }
        draw_points(surface);
        draw_points(state->surface);
        if (debug_text[0] != '\0') {
            SDL_SetRenderDrawColor(renderer, 64, 224, 208, 255);
            SDL_RenderDebugText(renderer, 10, 10, debug_text);
            SDL_SetRenderDrawColor(state->renderer, 64, 224, 208, 255);
            SDL_RenderDebugText(state->renderer, 10, 10, debug_text);
        }
        SDL_RenderPresent(renderer);
        SDL_UpdateWindowSurface(window);
        SDL_RenderPresent(state->renderer);
        SDL_UpdateWindowSurface(state->window);
        SDL_Delay(16);
    }
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_DestroyRenderer(state->renderer);
    SDL_DestroyWindow(state->window);
    SDL_Quit();
    return 0;
}