这让我起了墙..
我有一个非常简单的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上似乎不起作用,但我还没有深入研究过。
答案 0 :(得分:4)
回答自己,因为我终于弄明白了......
我终于回到了SDL2源附带的README-raspberrypi.txt 我第一次没有仔细阅读它......
问题1:我在全高清显示器上运行。 PI的默认GPU内存为64MB,这对于大型显示器和双缓冲来说是不够的。正如自述文件中所建议的,我将其增加到128MB,这解决了黑色图像问题。
问题2:文本输入无效,因为我的用户帐户不在输入组中。我最初在输入组中添加了默认的“pi”帐户,但是当我后来开始使用其他帐户时,我忘了将该用户添加到该组中。
简而言之:我自己(也)快速浏览文档。