为什么树莓派上的JavaFX(3D)无法正常工作,尽管它应该可以?

10

我认为我已经阅读了所有关于在树莓派上使用JFx解决3D问题的可用解决方案,但以下方案都不符合我的需求。我在运行2D应用时没有任何问题。 但是当我尝试运行3D程序时,所有的3D元素都消失了。在运行此命令后:

java -Djavafx.platform=eglfb -Dprism.verbose=true -Dcom.sun.javafx.experimental.embedded.3d=true -Dprism.glDepthSize=24 -Dprism.forceGPU=true -jar Brake_Check.jar

I get this:

Prism pipeline init order: es2 sw 
Using java-based Pisces rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing power of 2 sizes for textures
Using hardware CLAMP_TO_ZERO mode
Opting in for HiDPI pixel scaling
Prism pipeline name = com.sun.prism.es2.ES2Pipeline
Loading ES2 native library ... prism_es2
    succeeded.
GLFactory using com.sun.prism.es2.X11GLFactory
GraphicsPipeline.createPipeline failed for com.sun.prism.es2.ES2Pipeline
java.lang.UnsatisfiedLinkError: com.sun.prism.es2.X11GLFactory.nInitialize([I)J
    at com.sun.prism.es2.X11GLFactory.nInitialize(Native Method)
    at com.sun.prism.es2.X11GLFactory.initialize(X11GLFactory.java:146)
    at com.sun.prism.es2.ES2Pipeline.<clinit>(ES2Pipeline.java:81)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.sun.prism.GraphicsPipeline.createPipeline(GraphicsPipeline.java:187)
    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:91)
    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
    at java.lang.Thread.run(Thread.java:748)
*** Fallback to Prism SW pipeline
Prism pipeline name = com.sun.prism.sw.SWPipeline
(X) Got class = class com.sun.prism.sw.SWPipeline
Initialized prism pipeline: com.sun.prism.sw.SWPipeline
 vsync: true vpipe: false
lip 19, 2019 3:31:53 AM javafx.scene.paint.Material <init>
WARNING: System can't support ConditionalFeature.SCENE3D
lip 19, 2019 3:31:53 AM javafx.scene.shape.Shape3D <init>
WARNING: System can't support ConditionalFeature.SCENE3D
lip 19, 2019 3:31:53 AM javafx.scene.shape.Shape3D <init>
WARNING: System can't support ConditionalFeature.SCENE3D
lip 19, 2019 3:31:53 AM javafx.scene.shape.Shape3D <init>
WARNING: System can't support ConditionalFeature.SCENE3D
lip 19, 2019 3:31:53 AM javafx.scene.shape.Shape3D <init>
WARNING: System can't support ConditionalFeature.SCENE3D
lip 19, 2019 3:31:53 AM javafx.scene.shape.Shape3D <init>
WARNING: System can't support ConditionalFeature.SCENE3D
lip 19, 2019 3:31:53 AM javafx.scene.PerspectiveCamera <init>
WARNING: System can't support ConditionalFeature.SCENE3D
lip 19, 2019 3:31:53 AM javafx.scene.LightBase <init>
WARNING: System can't support ConditionalFeature.SCENE3D
lip 19, 2019 3:31:54 AM javafx.scene.shape.Mesh <init>
WARNING: System can't support ConditionalFeature.SCENE3D
lip 19, 2019 3:31:54 AM javafx.scene.shape.Shape3D <init>
WARNING: System can't support ConditionalFeature.SCENE3D
lip 19, 2019 3:31:54 AM javafx.scene.paint.Material <init>
WARNING: System can't support ConditionalFeature.SCENE3D
lip 19, 2019 3:31:54 AM javafx.scene.SubScene <init>
WARNING: System can't support ConditionalFeature.SCENE3D
lip 19, 2019 3:31:54 AM javafx.scene.SubScene <init>
WARNING: System can't support antiAliasing

期望的图片: expected image

实际的图片: previous image

我已经安装了armv6hf-sdk-8.60.9

我将感激任何建议。

编辑

经过进一步的研究,我还添加了OpenJFX: apt-get install openjfx 这样整体上有了一些小的改进,但仍然缺少一些东西。 也许我会重新开始。我使用教程为我的树莓设置JavaFX,然后缺少libprism_es2.so,所以我从/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/arm/libprism_es2_eglfb.so复制并重命名它(我选择了这个,因为我认为如果我使用-Djavafx.platform=eglfb参数,这是一个好的选择),现在我添加了OpenJFX,那里还应该安装什么?你认为更新的sdk版本可能有帮助吗?但另一方面,我担心我在操作Linux方面的知识程度太基础了,所以我宁愿留在已经拥有的版本上,而不是取得进展。

现在,我的应用程序看起来像这样: actual image

输出消息:

Prism pipeline init order: es2 sw 
Using java-based Pisces rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing power of 2 sizes for textures
Using hardware CLAMP_TO_ZERO mode
Opting in for HiDPI pixel scaling
Prism pipeline name = com.sun.prism.es2.ES2Pipeline
Loading ES2 native library ... prism_es2
    succeeded.
GLFactory using com.sun.prism.es2.X11GLFactory
(X) Got class = class com.sun.prism.es2.ES2Pipeline
Initialized prism pipeline: com.sun.prism.es2.ES2Pipeline
Maximum supported texture size: 8192
Maximum texture size clamped to 4096
Non power of two texture support = true
Maximum number of vertex attributes = 16
Maximum number of uniform vertex components = 16384
Maximum number of uniform fragment components = 16384
Maximum number of varying components = 128
Maximum number of texture units usable in a vertex shader = 32
Maximum number of texture units usable in a fragment shader = 32
Graphics Vendor: VMware, Inc.
       Renderer: Gallium 0.4 on llvmpipe (LLVM 3.9, 128 bits)
        Version: 3.0 Mesa 13.0.6
 vsync: true vpipe: true
ES2ResourceFactory: Prism - createStockShader: Solid_LinearGradient_REFLECT.frag
lip 19, 2019 13:03:04 PM javafx.fxml.FXMLLoader$ValueElement processValue
WARNING: Loading FXML document with JavaFX API of version 9.0.1 by JavaFX runtime of version 8.0.111
ES2ResourceFactory: Prism - createStockShader: FillPgram_Color.frag
ES2ResourceFactory: Prism - createStockShader: Solid_TextureRGB.frag
PPSRenderer: scenario.effect - createShader: Blend_SRC_IN
new alphas
ES2ResourceFactory: Prism - createStockShader: Texture_Color.frag
QuantumRenderer: shutdown

你还有其他的建议吗?


你是否在谷歌上搜索了“UnsatisfiedLinkError: com.sun.prism.es2.X11GLFactory.nInitialize([I)J”并查看了所有相关链接? - Jim Garrison
我认为JavaFX版本不支持X11。你必须直接在终端上尝试。 - José Pereda
我已经编辑了我的帖子。 - Karol K
1个回答

6
所以,解决我的问题的主要方法是安装apt-get install openjfx,我之前已经提到过了。之后,我不再需要使用-Djavafx.platform=eglfb。 接下来出现的问题是一切都是黑色的。问题似乎在场景中添加的光(PointLight)上。当我把它删除后,一切开始变得好多了,但是...仍然存在一些缺陷。盒子上没有阴影,antiAliasing不起作用,虽然只有一个简单的动画,但它很卡顿。

enter image description here

编辑

快速更新。 一切都正常工作,我已经在项目中恢复了灯光。 我所做的是更改RPi的高级设置。

sudo raspi-config 然后选择高级选项,接下来选择 GL Driver,然后选择 GL (Full KMS) OpenGL desktop driver with full KMS,保存并重新启动。

目标达成。 enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接