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

时间:2014-01-13 13:54:19

标签: 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,但第3张图像(2.bmp)只显示为黑色字段。
这是结构性的 如果我替换前两张图像,它们都很好 如果我交替显示第2张和第3张图像,则不显示第3张图像 如果我使用超过3张图像,那么3及以上显示为黑色 装货订单无关紧要。从磁盘加载的第3张图像开始出错 所有图像都经过适当格式化的BMP。 我甚至在加载后使用SDL_SaveBMP()将2.bmp以不同的名称保存回磁盘以确保它已加载到内存中。新文件与原始文件略有不同。

此程序无需修改和相同的bmp文件,可在OSX(XCode5)和Windows(VC ++ 2012 Express)上正常工作。
问题只出现在Raspberry PI上 我已经对每个可能留下结果/错误代码的调用进行了明确的错误检查(为简洁起见,未在上面的示例中显示),但所有调用都显示“无错误”。
我使用了www.libsdl.org的最新稳定源集并按指令编译(configure,make,make install等)。

有人知道会发生什么事吗?

P.S。 键盘输入在我的PI上似乎不起作用,但我还没有深入研究过。

1 个答案:

答案 0 :(得分:4)

回答自己,因为我终于弄明白了......

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

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

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

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