Как отключить или обойти аппаратное ускорение графики (Prism) в JavaFX

ОС: OSX Mountain Lion.

Система: Virtual BOX 4.2.6.

Java: 1.7.0.40-ea-b34

Я хочу отключить аппаратное ускорение для своего приложения JAVAFX, потому что в моей системе (mac) нет аппаратного ускорения. Поэтому, когда нет ускорения HW, я получаю фатальную ошибку при выполнении моего приложения JAVAFX. Ошибка, связанная с «конвейером Prism Engine», и это происходит, когда java пытается выполнить собственные библиотеки openGL. Итак, я хочу отключить призму.

Я вижу, что есть некоторые аргументы vm, которые управляют поведением призмы, например... 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 

person Lalith J.    schedule 12.09.2013    source источник
comment
Какая версия Mac и ОС? Я думал, что все компьютеры Mac с поддерживаемой OS X 10.7.3+ были оснащены минимальным аппаратным обеспечением для поддержки аппаратного ускорения JavaFX 2.x.   -  person jewelsea    schedule 12.09.2013
comment
На самом деле это не физический MAC ... это виртуальная система Mac на виртуальном ящике, и VB не поддерживает 3D-ускорение.   -  person Lalith J.    schedule 12.09.2013
comment
Казалось бы, эта конфигурация должна работать "из коробки" Все сертифицированные платформы также сертифицированы при виртуализации в сертифицированном гипервизоре, если не указано иное. Сертифицированные гипервизоры: Oracle VM 2.2, VirtualBox 3.x, 4.x, так как это не работает сразу, вы можете сообщить об ошибке.   -  person jewelsea    schedule 13.09.2013
comment
Как сказал г-н Зенбени, -Dprism.order=j2d отлично работает с java 7. Г-н Петр Солюшн -Dprism.order=sw не работает. ошибка не найден подходящий конвейер. Я думаю, что это работает только с Java 8. Спасибо всем. Проблема решена :).   -  person Lalith J.    schedule 13.09.2013


Ответы (2)


Посмотрите на этот форум: https://forums.oracle.com/message/11018975

Добавьте это к своему исполнению Java:

-Dprism.order=j2d

Это должно делать свое дело.

person zenbeni    schedule 12.09.2013
comment
Это исправляет сбой, но формы не отображаются должным образом. - person Andreas; 19.05.2016
comment
обратите внимание, что это устарело с bugs.openjdk.java.net/browse/JDK-8095989 следует использовать -Dprism.order=sw, который использует конвейер программной эмуляции, а не конвейер DirectX 2D. - person Groostav; 28.02.2017

Графический конвейер j2d устарел в JavaFX 8, поэтому лучше использовать программный конвейер: -Dprism.order=sw. Чтобы убедиться, что вы действительно используете его, вы можете включить ведение журнала: -Dprism.verbose=true

person Petr    schedule 12.09.2013
comment
Является ли -Dprism.order=sw новым и доступным только в Java 8? Для Java 7 будет работать -Dprism.order=sw или вам нужно использовать устаревший конвейер j2d -Dprism.order=j2d, например ответ zenbeni? - person jewelsea; 13.09.2013
comment
Я не совсем уверен насчет FX 7. Вы можете проверить это в подробном режиме. - person Petr; 13.09.2013
comment
-Dprism.order=sw не работает в Java 7, протестировано на MacOS 10.8.5 и 64-разрядной версии Windows 7. - person bobndrew; 17.10.2013
comment
Я использую его, но когда у меня действительно большое изображение, оно усекается. В журналах у меня есть только: Растущий пул com.sun.prism.sw.SWTexturePool@542d472e цель до 147 837 360. Размер изображения 4,4 МБ. Как я могу обойти это? - person VANILKA; 18.09.2018
comment
Старый ответ, но все еще очень ценный! В моем приложении JavaFx нагрузка на ЦП была снижена примерно на 20% (в состоянии покоя загрузка ЦП составляла 20-25%, а сейчас составляет менее 5%) на Java 11 под Linux Debian путем установки -Dprism.order=sw. -Dprism.verbose=trueсообщил, что выбрал es2 в качестве первого выбора. - person HelloWorld; 23.06.2019