SDL2 не может разблокировать поверхность

0

Я писал несколько SDL2 в последнее время, и сегодня я переписал базу своего кода, чтобы сделать ее более структурированной и простой в использовании.

Проблема, с которой я сталкиваюсь, заключается в попытке размыть поверхность спрайтов, там она дает мне ошибку SDL. Surfaces must not be locked during blit что казалось разумным, поэтому я добавил SDL_UnlockSurface в начало моей blit-функции до SDL_BlitSurface но все же вернул ту же ошибку, Поскольку я видел в документации, что SDL_UnlockSurface является пустотой, я не могу знать, было ли это успешным или нет, но поскольку он не многопоточен, ничто не может заставить блокировать его, пока я бьется (и он только рисует на поверхности в начале приложения в любом случае).

Здесь функция blit

bool Sprite::blit(SDL_Surface* targetSurface){
    SDL_UnlockSurface(this->surface);
    int success = SDL_BlitSurface( this->surface, NULL, targetSurface, NULL );
    if ( success != 0){
        printf( "Unable to blit surface! SDL Error: %s\n"m SDL_GetError() );
        return false;
        }
    return true;
}

Заранее спасибо!

Теги:
sdl-2

1 ответ

2
Лучший ответ

Замки подсчитываются. Если вы дважды заблокировали поверхность, вам нужно разблокировать ее дважды. Лучше избегайте этой схемы - та же самая функция, что заблокированная поверхность должна разблокировать ее после выполнения ее работы.

Вы можете посмотреть surface->locked переменную, которая является числом блокировок, но она не включена в документацию, поэтому вы не можете полагаться на это имя - ее можно было бы изменить в будущих версиях.

  • 0
    Спасибо за разъяснение, не знал это. Что по-прежнему не имеет смысла, так это то, что я разблокирую его каждый кадр, и я нигде не написал в коде, что он должен быть заблокирован в первую очередь. Я использую только один спрайт во всем приложении, и его поверхность рисуется только один раз с SDL_LoadBMP, и он возвращает, что он был успешным, поэтому он не решает проблему
  • 0
    Я только что проверил количество блокировок, и количество блокировок очень велико. Что странно, что количество блокировок увеличивается с 512 до 1024, когда приложение сфокусировано, и возвращается к 512, когда оно не сфокусировано, что может это изменить? Это правильный ответ, мне просто нужно копаться глубже в моем коде, спасибо!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню