c++ - SDL_RenderCopy() 在 Raspberry PI 上有奇怪的行为

标签 c++ raspberry-pi

这让我很难过..
我有一个非常简单的 SDL2 程序。
它有一个包含 3 个 SDL_Texture 指针的数组。
这些纹理填充如下:

SDL_Texture *myarray[15];
SDL_Surface *surface;

for(int i=0;i<3;i++)
{
   char filename[] = "X.bmp";
   filename[0] = i + '0';
   surface = SDL_LoadBMP(filename);
   myarray[i] = SDL_CreateTextureFromSurface(myrenderer,surface);
   SDL_FreeSurface(surface);
}

这有效,没有错误。

在主循环中(这只是一个标准的事件循环,等待 SDL_QUIT、击键和 SDL_Timer 每秒放入事件队列的用户事件)我只是这样做(对于定时器触发的事件):

idx = (idx+1) % 3;         // idx is global var initially 0.
SDL_RenderClear(myrenderer);
SDL_RenderCopy(myrenderer,  myarray[idx], NULL, NULL);
SDL_RendererPresent(myrenderer);

这适用于 0.bmp 和 1.bmp,但第三张图片 (2.bmp) 仅显示为黑色区域。
这是结构性的。
如果我交替使用前 2 张图像,它们都很好。
如果我交替显示第二张和第三张图片,则不会显示第三张图片。
如果我使用超过 3 个图像,则 3 个及以上图像显示为黑色。
加载顺序无关紧要。从磁盘加载的第 3 个图像开始出错。
所有图像都是正确格式化的 BMP。 我什至在加载后使用 SDL_SaveBMP() 以不同的名称将 2.bmp 保存回磁盘,以确保它已正确加载到内存中。新文件与原始文件完全相同。

这个程序,没有修改和相同的 bmp 文件,在 OSX (XCode5) 和 Windows (VC++ 2012 Express) 上运行良好。
该问题仅在 Raspberry PI 上显示。
我对每个可能留下结果/错误代码的调用都进行了显式错误检查(为简洁起见,上面的示例中未显示),但所有调用都显示“无错误”。
我使用了 www.libsdl.org 的最新稳定源代码集,并按照说明进行了编译(配置、制作、安装等)。

有人知道会发生什么吗?

附言 键盘输入在我的 PI 上似乎也不起作用,但我还没有深入研究。

最佳答案

当我终于自己弄明白时回答自己......

我终于回到了 SDL2 源代码附带的 README-raspberrypi.txt。
我第一次没有仔细阅读它...

问题 1:我在全高清显示器上运行。 PI 的默认 GPU 内存为 64MB,这对于大型显示​​器和双缓冲来说是不够的。按照 README 中的建议,我将其增加到 128MB,这解决了黑色图像问题。

问题 2:文本输入无效,因为我的用户帐户不在输入组中。我最初将默认的“pi”帐户添加到输入组,但是当我后来开始使用另一个帐户时,我忘记将该用户添加到该组。

简而言之:我自己(也)快速浏览了文档。

关于c++ - SDL_RenderCopy() 在 Raspberry PI 上有奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21092971/

相关文章:

c++ - 在删除另一类中一个类的对象时,析构函数如何工作

python - Python 中是否有某种虚拟数据库?

c - 树莓派多线程套接字问题C

Python:每秒运行循环并触发函数5秒

c++ - 在 OpenGL ES 中调整由投影仪引起的失真

c++ - 如何正确移动相机的朝向

c++ - mingw中的时间函数

c++ - 模板专用类之间的构造函数重载

c++ - Qt 中的新功能获取链接器和 Makefile 错误

docker - 在 Raspberry Pi 3B+ 上运行 ASP .NET Core