Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Ubuntu上的JaxaFX着色器问题:帮助翻译错误_Java_Opengl_Javafx_Shader_Esri - Fatal编程技术网

Java Ubuntu上的JaxaFX着色器问题:帮助翻译错误

Java Ubuntu上的JaxaFX着色器问题:帮助翻译错误,java,opengl,javafx,shader,esri,Java,Opengl,Javafx,Shader,Esri,Java中报告了一个我想解决的错误。我不确定是什么导致了错误,我想了解原因 我正在使用JavaFX、Java8和Ubuntu操作系统。我试图在这里使用“获取声明指南”: 不幸的是,我遇到了一个我无法理解的错误 Exception in thread "JavaFX Application Thread" java.lang.RuntimeException:Error code: 18 Error message: Internal error exception Additional erro

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

我正在使用JavaFX、Java8和Ubuntu操作系统。我试图在这里使用“获取声明指南”:

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

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

最后一行似乎表明我应该没事了?

这是Ubuntu 14.04的一个已知问题。我添加了几种方法来尝试:

您的glxinfo中的行似乎解决了所有问题:

OpenGL着色语言版本字符串:1.30

您的OpenGL驱动程序仅支持GLSL版本1.30

  • 尝试在着色器代码中添加版本330(或任何其他版本)
  • 或者尝试强制执行MESA\u GLSL\u VERSION\u OVERRIDE=1.50
  • ——使用gl=egl
    可以作为临时解决方案

尝试所有这些方法,如果没有一种方法成功,请尝试联系开发人员。

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

由于您使用Linux和来自的开放源代码驱动程序,因此在这里您可以做的不多。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的支持来解决您的问题,但这只是一个拙劣的黑客行为,它本身可能会带来各种各样的问题……

也许您应该按照错误所说的那样做,并使用受支持的GLSL版本你安装了mesa的rsion吗?@JacobB。运行glxinfo时,我似乎有3.20ES@sillyfly,似乎是17.4.0-develDo您有权访问着色器源代码吗?我在您的链接中没有看到任何内容,但着色器可能有一个
#version 150
指令,该指令将尝试使用GLSL 1.5。我已授予此答案的奖金这是最全面的答案,而悬赏金即将到期。看来答案很不幸,“什么都做不了”。我唯一能想到的另一个选择是尝试强迫我的Optimus笔记本电脑使用GeForce驱动程序而不是Intel?如果可能的话,有什么想法吗?还有,是硬件还是驱动程序决定了OpenGL的最高版本?好吧,正如mesa所示,您的硬件能够使用GL 4.5(mesa可能需要模仿一些功能才能达到这一水平,尤其是在较旧的intel GPU上支持64位浮点运算)因此,英伟达公司在原则上可以为它编写一个GL 4.5兼容驱动程序。台面DEVS只是决定不必花费太多的精力去支持过时的特性。NVIDIA专有驱动程序则会增加支持兼容性配置文件,如果你得到OpthoMe或Prime工作,你实际上应该能够用英伟达卡运行这个。