SDL2无法解锁表面

SDL2 unable to unlock surface

本文关键字:表面 解锁 SDL2      更新时间:2023-10-16

我最近一直在写一些SDL2,今天我重写了我的代码基础,使它更结构化,更容易使用。

我遇到的问题是当试图blit精灵表面时,它给了我SDL错误Surfaces must not be locked during blit,这似乎是合理的,所以我在SDL_BlitSurface之前将SDL_UnlockSurface添加到blit函数的开始,但仍然返回相同的错误。因为我在文档中看到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: %sn"m SDL_GetError() );
        return false;
        }
    return true;
}

提前感谢!

锁被统计。如果你锁定表面两次,你必须解锁两次。最好避免这种方案-锁定表面的同一个函数应该在其工作完成后解锁它。

您可以查看surface->locked变量,它是锁的计数,但它没有包含在文档中,因此您不能依赖此名称-它可能在未来的版本中更改。