jjzjj

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

coder 2024-02-21 原文

这让我很难过..
我有一个非常简单的 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++ - SDL_RenderCopy() 在 Raspberry PI 上有奇怪的行为的更多相关文章

  1. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  2. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  3. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  4. ruby - Ruby gsub 替换中的行为不一致? - 2

    两个gsub产生不同的结果。谁能解释一下为什么?代码也可在https://gist.github.com/franklsf95/6c0f8938f28706b5644d获得.ver=9999str="\tCFBundleDevelopmentRegion\n\ten\n\tCFBundleVersion\n\t0.1.190\n\tAppID\n\t000000000000000"putsstr.gsub/(CFBundleVersion\n\t.*\.).*()/,"#{$1}#{ver}#{$2}"puts'--------'putsstr.gsub/(CFBundleVersio

  5. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  6. ruby-on-rails - Ruby 中意外的大小写行为 - 2

    我在一段非常简单的代码(如我所想)中得到了一个错误的值:org=4caseorgwhenorg=4val='H'endputsval=>nil请不要生气,我希望我错过了一些非常明显的东西,但我真的想不通。谢谢。 最佳答案 这是典型的Ruby错误。case有两种被调用的方法,一种是你传递一个东西作为分支的基础,另一种是你不传递的东西。如果您确实在case中指定了一个表达式语句然后评估所有其他条件并与===进行比较.在这种情况下org评估为false和org===false显然不是真的。所有其他情况也是如此,它们要么是真的,要么是假的。

  7. ruby - 使对象的行为类似于 ruby​​ 中并行分配的数组 - 2

    假设您在Ruby中执行此操作:ar=[1,2]x,y=ar然后,x==1和y==2。是否有一种方法可以在我自己的类中定义,从而产生相同的效果?例如rb=AllYourCode.newx,y=rb到目前为止,对于这样的赋值,我所能做的就是使x==rb和y=nil。Python有这样一个特性:>>>classFoo:...def__iter__(self):...returniter([1,2])...>>>x,y=Foo()>>>x1>>>y2 最佳答案 是的。定义#to_ary。这将使您的对象被视为要分配的数组。irb>o=Obje

  8. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

  9. ruby - 了解在 Ruby 中与 lambda 一起使用的 inject 行为 - 2

    我经常将预配置的lambda插入可枚举的方法中,例如“map”、“select”等。但是“注入(inject)”的行为似乎有所不同。例如与mult4=lambda{|item|item*4}然后(5..10).map&mult4给我[20,24,28,32,36,40]但是,如果我制作一个2参数lambda用于像这样的注入(inject),multL=lambda{|product,n|product*n}我想说(5..10).inject(2)&multL因为“inject”有一个可选的单个初始值参数,但这给了我......irb(main):027:0>(5..10).inject

  10. ruby-on-rails - 浮点乘法的 Ruby 奇怪问题 - 2

    有没有人用ruby​​解决这个问题:假设我们有:a=8.1999999我们想将它四舍五入为2位小数,即8.20,然后乘以1,000,000得到8,200,000我们是这样做的;(a.round(2)*1000000).to_i但是我们得到的是8199999,为什么?奇怪的是,如果我们乘以1000、100000或10000000而不是1000000,我们会得到正确的结果。有人知道为什么吗?我们正在使用ruby​​1.9.2并尝试使用1.9.3。谢谢! 最佳答案 每当你在计算中得到时髦的数字时使用bigdecimalrequire'bi

随机推荐