【问题标题】:How to disable or bypass Hardware Graphics Acceleration(Prism) in JavaFX如何在 JavaFX 中禁用或绕过硬件图形加速(Prism)
【发布时间】:2013-09-12 03:23:02
【问题描述】:

操作系统:OSX Mountain Lion。

系统:Virtual BOX 4.2.6。

Java:1.7.0.40-ea-b34

我想为我的 JAVAFX 应用禁用硬件加速,因为我的系统 (mac) 上没有硬件加速。因此,当没有硬件加速时,我在执行我的 JAVAFX 应用程序时遇到致命错误。与“棱镜引擎管道”相关的错误,当 java 尝试执行 openGL 本机库时发生。所以我想禁用棱镜。

我看到有一些 vm args 可以控制棱镜行为,例如.. Dprism.forceGPU=true;

有没有类似上面的东西来禁用棱镜或openGL请求?

致命错误(openGl相关代码)

Stack: [0x000000016c8f9000,0x000000016c9f9000], sp=0x000000016c9f7f40, free space=1019k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [libobjc.A.dylib+0x639f] objc_msgSend_fixup+0x5f
C [AppKit+0x28134c] -[NSOpenGLContext initWithFormat:shareContext:]+0xac
C [libprism-es2.dylib+0x4e9f] createContext+0x1b3
C [libprism-es2.dylib+0x4729] Java_com_sun_prism_es2_gl_mac_MacGLFactory_nInitialize+0xa2
j com.sun.prism.es2.gl.mac.MacGLFactory.nInitialize([I)J+0
j com.sun.prism.es2.gl.mac.MacGLFactory.initialize(Ljava/lang/Class;Lcom/sun/prism/es2/gl/GLPixelFormat$Attributes;)Z+73
j com.sun.prism.es2.ES2Pipeline.<clinit>()V+54 

【问题讨论】:

  • Mac 和 OS 是什么版本?我认为所有运行受支持的 OS X 10.7.3+ 的 Mac 都配备了支持 JavaFX 2.x 硬件加速的最低硬件。
  • 其实这不是物理MAC..这是virtual Box上的虚拟mac系统,VB不支持3d加速。
  • 这似乎是configuration should work out of the box "所有经过认证的平台在经过认证的虚拟机管理程序中进行虚拟化时也会经过认证,除非另有说明。经过认证的虚拟机管理程序是:Oracle VM 2.2、VirtualBox 3.x、4.x ",因为它不能马上工作,你可能想log a bug report
  • 正如 zenbeni 先生所说 -Dprism.order=j2d 与 java 7 完美配合。 Petr 先生解决方案 -Dprism.order=sw 不工作。错误是“未找到合适的管道”。我认为它只适用于 java 8。谢谢大家解决问题:)。

标签: java opengl javafx


【解决方案1】:

j2d 图形管道在 JavaFX 8 中已被弃用,因此最好使用软件管道:-Dprism.order=sw。要验证您是否确实在使用它,您可以打开日志记录:-Dprism.verbose=true

【讨论】:

  • -Dprism.order=sw 是新的并且仅在 Java 8 中可用吗?对于 Java 7,-Dprism.order=sw 可以工作,还是您需要像 zenbeni 的回答那样使用已弃用的 j2d 管道 -Dprism.order=j2d
  • 我不太确定 FX 7。您可以使用详细模式进行检查。
  • -Dprism.order=sw 在 Java 7 中不工作,在 MacOS 10.8.5 和 Windows 7 64 位上测试。
  • 我使用它,但是当我有一个非常大的图像时,它会被截断。在日志中我只有:“Growing pool com.sun.prism.sw.SWTexturePool@542d472e target to 147 837 360”。图片有4,4MB。我该如何解决它?
  • 旧答案,但仍然非常有价值!在我的 JavaFx 应用程序上,通过设置 -Dprism.order=sw,在 Linux Debian 下的 Java 11 上,CPU 负载减少了大约 20%(静止时 CPU 负载为 20-25%,现在低于 5%)。 -Dprism.verbose=truereported 使用 es2 作为首选。
【解决方案2】:

看看这个论坛:https://forums.oracle.com/message/11018975

将此添加到您的 java 执行中:

-Dprism.order=j2d

这应该可以解决问题。

【讨论】:

  • 它修复了崩溃但表单无法正确呈现
  • 请注意,自 bugs.openjdk.java.net/browse/JDK-8095989 起已弃用,您应该使用 -Dprism.order=sw,它使用软件仿真管道而不是 DirectX 2D 管道。
猜你喜欢
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多