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

SDL_RenderCopy() has strange behavior on Raspberry PI

本文关键字:PI RenderCopy Raspberry SDL      更新时间:2023-10-16

这把我逼疯了
我有一个非常简单的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)只是显示为一个黑色区域
这是结构性的
如果我交替前两个图像,它们都很好
如果我交替使用第二张和第三张图像,则第三张不会显示
如果我使用的图像超过3张,则3张及以上显示为黑色
装载顺序无关紧要。从磁盘加载的第三个映像开始出现问题
所有图像都是正确格式化的BMP。我甚至在加载2.bmp后使用SDL_SaveBMP()将其以不同的名称保存回磁盘,以确保它在内存中加载正常。新文件与原始文件完全相同。

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

有人知道会发生什么吗?

p.S。键盘输入似乎对我的PI也不起作用,但我还没有深入研究。

当我终于自己想出来的时候,回答自己。。。

最后,我回到了SDL2源代码附带的README-raspberrypi.txt
我第一次读得不够仔细。。。

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

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

简言之:被我自己(过于)快速浏览文档所困扰。