Raspberry PI 4B 和另一个 SBC 上的 Open GL 性能

问题描述 投票:0回答:0

美好的一天!

我从一家公司接到一个项目,现在我需要用树莓派 3 开发一个街机柜。它有一个操纵杆和一些外部设备,通过 GPIO 控制。我已经组织好 RPI 4B 8Gb 和操纵杆之间的通信,我已经可以接收来自投币器的信号。下一个麻烦是性能。我使用 Java 创建视频游戏并将内部处理库 (www.processing.org) 添加到项目中以进行图形输出和 GPIO 交互。

processing-core库有两种渲染图形的能力:软件渲染(在size()函数中使用参数JAVA2D)和硬件加速(在同一个函数中使用参数P2D或P3D)。参数 P2D 和 P3D 启用 OpenGL 支持,我的所有游戏在普通桌面 PC 或 android 设备上的性能都比 JAVA2D 模式下的性能更高。但不是在我的单板计算机上。

在 Raspberry PI 4B 8Gb(Raspberry Pi OS 64 位桌面)上,我得到:JAVA2D 模式下为 11 FPS,P2D 模式下为 6 FPS。 在我的 Khadas Vim3 pro(Ubuntu 20.04 64 位)上,我在 JAVA2D 模式下获得了 14 FPS,在 P2D 模式下获得了 8 FPS。

不明白单板机性能有什么问题?我的游戏非常简单:屏幕尺寸为:1920x1080。所有游戏图形都打包在一个 PNG 文件中。我为背景绘制图像,而不是 3 架飞机、子弹和全屏爆炸。所有的图形都是在没有缩放的情况下使用函数绘制的:

image(source, posX, poxY, width, height, leftPixelInSource, upperPixelInSource, rightPixelInSource, lowerPixelInSource);

我需要至少达到 20 FPS 才能完成项目。

我使用 Intellij IDEA(带有 sudo 参数),当我使用 OpenGL(size() 函数中的 P2D 参数)时,我在 logcat 中看到接下来的 3 行:

error: XDG_RUNTIME_DIR not set in the environment.
error: XDG_RUNTIME_DIR not set in the environment.
error: XDG_RUNTIME_DIR not set in the environment.

,但游戏运行。当我关闭游戏时,我会在 logcat 中收到下一条消息。

X11Util.Display: Shutdown (JVM shutdown: true, open (no close attempt): 2/2, reusable (open, marked uncloseable): 0, pending (open in creation order): 2)
X11Util: Open X11 Display Connections: 2
X11Util: Open[0]: NamedX11Display[:0, 0x7f1c07cc90, refCount 1, unCloseable false]
X11Util: Open[1]: NamedX11Display[:0, 0x7f1c0a2150, refCount 1, unCloseable false]

在 Java 模式下我没有任何错误。 我尝试在没有 sudo 参数和启用 P2D 参数的情况下启动。我有一个新错误,无法启动游戏。日志猫显示:

Resource compiler: Error: Couldn't copy [/home/mgdsstudio/GD/Workspace/Airfight/Libs/META-INF/MANIFEST.MF] to [/home/mgdsstudio/GD/Workspace/Airfight/out/production/desktop/META-INF/MANIFEST.MF]
java.io.IOException: Couldn't copy [/home/mgdsstudio/GD/Workspace/Airfight/Libs/META-INF/MANIFEST.MF] to [/home/mgdsstudio/GD/Workspace/Airfight/out/production/desktop/META-INF/MANIFEST.MF]
    at com.intellij.openapi.util.io.FileUtil.performCopy(FileUtil.java:419)
    at com.intellij.openapi.util.io.FileUtil.copyContent(FileUtil.java:408)
    at org.jetbrains.jps.incremental.FSOperations.copy(FSOperations.java:472)
    at org.jetbrains.jps.incremental.resources.ResourcesBuilder.copyResource(ResourcesBuilder.java:123)
    at org.jetbrains.jps.incremental.resources.ResourcesBuilder.lambda$build$0(ResourcesBuilder.java:67)
    at org.jetbrains.jps.incremental.fs.BuildFSState.processFilesToRecompile(BuildFSState.java:374)
    at org.jetbrains.jps.incremental.IncProjectBuilder$6.processDirtyFiles(IncProjectBuilder.java:1261)
    at org.jetbrains.jps.incremental.resources.ResourcesBuilder.build(ResourcesBuilder.java:56)
    at org.jetbrains.jps.incremental.resources.ResourcesBuilder.build(ResourcesBuilder.java:27)
    at org.jetbrains.jps.incremental.IncProjectBuilder.buildTarget(IncProjectBuilder.java:1266)
    at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1166)
    at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1303)
    at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:1118)
    at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:889)
    at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:471)
    at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:197)
    at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:150)
    at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:371)
    at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:193)
    at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:211)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.nio.file.AccessDeniedException: /home/mgdsstudio/GD/Workspace/Airfight/out/production/desktop/META-INF/MANIFEST.MF
    at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
    at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219)
    at java.base/java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:478)
    at java.base/java.nio.file.Files.newOutputStream(Files.java:220)
    at com.intellij.openapi.util.io.FileUtil.openOutputStream(FileUtil.java:452)
    at com.intellij.openapi.util.io.FileUtil.performCopy(FileUtil.java:415)
    ... 22 more

我在 RPI 上阅读了一些关于默认 OpenGL 驱动程序问题的信息。但我不明白我必须做什么才能提高 FPS 或修复 OpenGL?桌面版和非桌面版之间的 Raspberry Pi OS 32 位有区别吗?也许我需要尝试另一个操作系统发行版以获得更好的性能?

java opengl raspberry-pi processing raspberry-pi4
© www.soinside.com 2019 - 2024. All rights reserved.