c++ - SDL2 无法解锁表面

标签 c++ sdl-2

我最近一直在编写一些 SDL2,今天我重写了我的代码基础,使其更加结构化和更易于使用。

我遇到的问题是当尝试 blit Sprite 表面时,它给我 SDL 错误 Surfaces must not be locked during blit 这似乎是合理的所以我添加了 SDL_UnlockSurface 到我的 blit 函数的开头 SDL_BlitSurface 之前,但仍然返回相同的错误。 因为我在文档中看到 SDL_UnlockSurface 是空的,所以我不知道它是否成功,但由于它不是多线程的,所以在我进行 blitting 时没有任何东西可以强制锁定它(而且它只是无论如何在应用程序开始时绘制到表面)。

这是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 变量,它是锁计数,但它没有包含在文档中,所以您不能依赖这个名称 - 它可能会在未来的版本中更改.

关于c++ - SDL2 无法解锁表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22478030/

相关文章:

linux - 在 Linux 上安装 SDL2

c - SDL_CreateRenderer 内的段错误

c++ - 如何将c++实验库添加到mac编译器?

python - 如何通过 C++ 在 Python 函数中传递字符串参数

c++ - 定义所有内容时出现链接器错误 2019

c++ - SDL1 -> SDL2 分辨率列表构建自定义屏幕模式类

c++ - 如何使用 SDL2 在 C++ 中将框渲染到屏幕?

c++ - 使用 MFC 添加两个数字

c++ - 如何测量 C++ 中特定函数的运行时间{非常准确}

c++ - CUDA中图像处理的问题