Я писал несколько 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;
}
Заранее спасибо!
Замки подсчитываются. Если вы дважды заблокировали поверхность, вам нужно разблокировать ее дважды. Лучше избегайте этой схемы - та же самая функция, что заблокированная поверхность должна разблокировать ее после выполнения ее работы.
Вы можете посмотреть surface->locked
переменную, которая является числом блокировок, но она не включена в документацию, поэтому вы не можете полагаться на это имя - ее можно было бы изменить в будущих версиях.