java - Ubuntu 上的 JaxaFX 着色器问题 : Help translate error

标签 java opengl javafx shader esri

Java 中报告了一个错误,我想解决该错误。我不确定是什么导致了错误,我想了解原因。

我正在使用 JavaFX、Java 8 和 Ubuntu 操作系统。我正在尝试使用此处的说明指南:https://developers.arcgis.com/java/latest/guide/display-a-scene.htm

不幸的是,我遇到了一个我无法理解的错误。

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException:Error code: 18
Error message: Internal error exception
Additional error message: star_draw,GL_VERTEX_SHADER:0:3(10): error: GLSL 1.50 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, 3.00 ES, 3.10 ES, and 3.20 ES

我如何理解此错误以及问题所在,以便我可以开始排除故障并找到解决方案?

at com.esri.arcgisruntime.internal.mapping.view.RenderingContext.nativeDrawMap(Native Method)

这是我的 glxinfo:

mark@marks-computer:~$ glxinfo | grep version

server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
    Max core profile version: 4.5
    Max compat profile version: 3.0
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
OpenGL core profile version string: 4.5 (Core Profile) Mesa 17.4.0-devel
OpenGL core profile shading language version string: 4.50
OpenGL version string: 3.0 Mesa 17.4.0-devel
OpenGL shading language version string: 1.30
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 17.4.0-devel
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

最后一行似乎表明我应该没问题?

最佳答案

您的应用程序正在尝试编译 GLSL 1.50 着色器。 GLSL 版本 1.50 是随 OpenGL 3.2 一起引入的,因此在 GL 3.2 以下版本的 OpenGL 上下文中尝试此操作不能保证(并且通常不太可能)工作。您收到的错误消息明确告诉您 GLSL 1.50 不可用。

由于您使用 Linux 以及来自 Mesa 3D project 的开源驱动程序,您在这里无能为力。 Mesa 只实现了现代 OpenGL 的核心配置文件,而不是兼容性配置文件。对于遗留应用程序,mesa 还支持高达 GL 3.0 (GLSL 1.30) 的遗留上下文。从输出中可以清楚地看出您的应用程序确实使用了遗留上下文。

请注意,OpenGL 规范明确指出兼容性配置文件支持是可选。您的应用程序只是尝试在遗留上下文中使用 GL 3.2+ 功能,根据规范,该上下文刚刚被破坏。这仅适用于公开可选兼容性配置文件的驱动程序。唯一真正的解决方案是修复 JavaFX 以使用核心配置文件上下文(这需要摆脱它们正在使用的所有已弃用的 GL 功能 - 而这些东西现在已经被弃用了十年!),或者将自身限制为 GL 2.1 并保留旧版上下文(在具有 mesa 的 linux 上,3.0 也可以工作,但 Mac 上的 OSX 在旧版模式下最多可以执行 2.1)。

也许可以通过设置环境变量MESA_GLSL_VERSION_OVERRIDE=150来解决您的问题,以在您的3.0上下文中伪造对GLSL 1.50的支持,但这只是一个糟糕的黑客行为本身可能会带来各种问题......

关于java - Ubuntu 上的 JaxaFX 着色器问题 : Help translate error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47628186/

相关文章:

JavaFX - 无法从 EventHandler 中的 View Controller 访问变量

java - 如何向 JavaFX 中除一个选项卡之外的所有选项卡添加关闭按钮?

opengl - glGetShaderiv()GL_COMPILE_STATUS返回GL_FALSE

c++ - OpenGL SDL LINK 错误 MSVCRT.lib

java - 从不使用 spring ldap 设置 tls_reqcert

java - 在android中加载带有图像的联系人的有效方法

opengl - 将 OpenGL 渲染缓冲区绘制到屏幕

JavaFX 时钟小部件随机抛出异常

java - 如何在 Gatting 脚本中运行 java 文件?

java - 在java中使用HashMap在链表中查找循环