Segfaults SDL2 - Реализация рендерера - PullRequest
1 голос
/ 02 мая 2020

Только что реализовал SDL_Renderer в моем движке

state_t init_rend(window_t *context,flag_t flags) {
        rend.renderer = NULL;
        rend.renderer = SDL_CreateRenderer(context,-1,flags);
        rend.index = -1;

        if (rend.renderer != NULL) {
                return TRUE;
        } else {
                return FALSE;
        }
}

В моем клиентском / тестовом приложении:

 // Init Base2D game
        init_env(VIDEO|AUDIO);

        // Init Display display
        init_disp(640,480,"Display",RESIZABLE|VISIBLE,make_color(255,255,255,255));

        // Init Renderer renderer
        init_rend(display->window,SOFTWARE);

        // Game Loop
        state_t status;
        while (TRUE) {
                update();
                status = listen();
                if (!status) {
                        break;
                }
                /* User Event Handles */
        }

И я мог успешно обработать изменение размера окна с помощью:

void resize_window() {
        printf("I was here!\n");
        SDL_FreeSurface(display->container);
        printf("Now I am here\n");
        display->container = SDL_GetWindowSurface(display->window);
        SDL_FillRect(
                display->container,
                NULL,
                SDL_MapRGBA(
                        display->container->format,
                        get_red(),
                        get_green(),
                        get_blue(),
                        get_alpha()
                )
        );
}

Однако, поскольку я реализовал рендерер, всякий раз, когда я пытаюсь изменить размер моего дисплея, при попытке SDL_FreeSurface(display->container) происходит сбой.

Как я уже упоминал, изменение размера работало нормально, пока я не реализовал рендер.

Почему это происходит?

1 Ответ

1 голос
/ 03 мая 2020

По ссылке, предоставленной пользователем: keltar,

Мне кажется, что go с SDL2 мне кажется, это использовать средство визуализации для рисования в окне intead старого метода SDL1 с использованием поверхности .

Я так и сделал, удалил код surface и использовал только рендер, и код работает без проблем

Спасибо

...