全网首发:分析及解决com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required

简介: 全网首发:分析及解决com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required

详细错误

com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required, profile > GL2 requested (OpenGL >= 3.1). Requested: GLProfile[GL3bc/GL3bc.hw], current: 3.1 (Compat profile, compat[ES2, ES3], FBO, hardware) - 3.1 Mesa 20.0.8
  at jogamp.opengl.x11.glx.X11GLXContext.createImpl(X11GLXContext.java:440)
  at jogamp.opengl.GLContextImpl.makeCurrentWithinLock(GLContextImpl.java:765)
  at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:648)
  at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:586)
  at javax.media.j3d.JoglPipeline.createNewContext(JoglPipeline.java:6411)
  at javax.media.j3d.Canvas3D.createNewContext(Canvas3D.java:4612)
  at javax.media.j3d.Canvas3D.createNewContext(Canvas3D.java:2386)
  at javax.media.j3d.Renderer.doWork(Renderer.java:881)
  at javax.media.j3d.J3dThread.run(J3dThread.java:271)
DefaultRenderingErrorListener.errorOccurred:
CONTEXT_CREATION_ERROR: Renderer: Error creating Canvas3D graphics context
graphicsDevice = X11GraphicsDevice[screen=0]
canvas = javax.media.j3d.SwCanvas3D[canvas0,0,0,1433x806]
X11Util.Display: Shutdown (JVM shutdown: true, open (no close attempt): 1/1, reusable (open, marked uncloseable): 0, pending (open in creation order): 1)
X11Util: Open X11 Display Connections: 1
X11Util: Open[0]: NamedX11Display[:0, 0x7f30d73600, refCount 1, unCloseable false]
tsit@tsit-GW-001M1A-FTF:/opt/Taishan/Suite$


解决办法一(对于某些版本的LINUX有效)

com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required, profile > GL2 reques_柳鲲鹏-CSDN博客


分析起因:在新的LINUX上系统上经常闪退

 以前在老的KYLIN/UOS系统上,用方法一确实解决了问题。去年换了新版本之后,这一招也不灵了,直接崩溃闪退。本来如果是功能无效,不闪退,这事也就不了了之(因为在苹果上几乎必然闪退);或者大家都死,也就算了。结果有意思的事情出现了:在KYLIN/UOS上,无锡这边的机器表现正常,泰安那边经常死。推测是显卡不同导致的。于是吾就想:能不能分析一下运行路径,看看能不能解决?起码搞清楚原因。


createImpl

 由错误可知,这里是产生异常的地方。自然的,可以从这里找一下分叉。


 初步来看,分支产生于426行,if( 0 != contextHandle ),就是contextHandle产生失败,导致闪退。为什么闪退?那应该是跟本地方法有关。


contextHandle = GLX.glXCreateContext()


createContextARB

正确的时候,major=3,minor=1。


AbstractGraphicsConfiguration

在虚拟机上,GLProfile[GL2/GL2.hw]


在出错机上,GLProfile[GL3/GL3.hw]


 那么这个是哪里来的?是产生Surface时就有了。吾想继续跟踪下去,看看怎么加载的。后来想这个思路不对,不同机器支持的不一样,不能强制统一。


contextHandle=0并不会出错。

   吾试着强制返回0,在虚拟机上并不出错,有一个输出信息大意是:不支持GL3,回落(fall back)到GL2。


闪退原因

 既然contextHandle=0并不会导致问题,那么就是这一句有问题:


if( glp.isGL3() && createContextARBTried )


 结合Config的信息,出错机上这个判断正好为真,进入其中代码,一通操作于是就崩溃了。


解决办法

 解决办法也真的简单,要防止上述语句为真即可。吾定义了一个常量:ENABLE_GL3_TO_GL2。测试后都正常了。


 简单吧?真正的功劳,是伟大的开源。没有他们,什么都是瞎扯。所以吾将修改公开出来(不公开违反开源协议)。

目录
相关文章
|
Java
com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required, profile > GL2 reques
com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required, profile > GL2 reques
99 0
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(一)
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(一)
178 0
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(一)
|
机器学习/深度学习 索引
【OpenGL】十四、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_STRIP 三角形 | GL_TRIANGLE_STRIP 三角形绘制分析 )
【OpenGL】十四、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_STRIP 三角形 | GL_TRIANGLE_STRIP 三角形绘制分析 )
289 0
【OpenGL】十四、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_STRIP 三角形 | GL_TRIANGLE_STRIP 三角形绘制分析 )
|
异构计算 缓存 HTML5
关于 OpenGL 中平移矩阵变换与实体对象坐标平移的关系分析结论
关于 OpenGL 中平移矩阵变换与实体对象坐标平移的关系分析结论 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
778 0
|
Android开发 HTML5 移动开发
OpenGL ES 贴图图片是否有 Alpha 通道以及图片大小导致无法显示帖图的原因分析
OpenGL ES 贴图图片是否有 Alpha 通道以及图片大小导致无法显示帖图的原因分析 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
1160 0
|
API iOS开发
OpenGL ES 版本与iOS版本的支持对应关系以及EAGL的来源分析
OpenGL ES 版本与iOS版本的支持对应关系以及EAGL的来源分析 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
2112 0
|
7月前
|
XML 小程序 Java
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
145 0
|
缓存 C++
Opengl ES之FBO
Opengl ES连载系列
158 0
|
存储 编解码 算法
Opengl ES之LUT滤镜(上)
Opengl ES之连载系列
473 0
|
数据安全/隐私保护 开发者
OpenGL ES 多目标渲染(MRT)
Opengl ES连载系列
332 0