【问题标题】:Processing P2D in eclipse noSuchMethodError glVertexAttribPointer(IIIZILjava/nio/Buffer;)在eclipse中处理P2D noSuchMethodError glVertexAttribPointer(IIIZILjava/nio/Buffer;)
【发布时间】:2013-12-26 23:56:44
【问题描述】:

我正在尝试在 Eclipse 中运行处理草图。我已经这样做了很长一段时间,但最近才更新到 2.1。 运行软件模式时,草图运行良好。但是当我尝试使用 P2D 模式时,出现以下错误。 我已经包含了处理文件夹中的所有 jogl jar。我不确定是否应该添加本机库,但我似乎找不到它们。

线程“动画线程”中的异常 java.lang.RuntimeException: java.lang.NoSuchMethodError: javax.media.opengl.GL2ES2.glVertexAttribPointer(IIIZILjava/nio/Buffer;)V 在 com.jogamp.common.util.awt.AWTEDTExecutor.invoke(AWTEDTExecutor.java:58) 在 jogamp.opengl.awt.AWTThreadingPlugin.invokeOnOpenGLThread(AWTThreadingPlugin.java:103) 在 jogamp.opengl.ThreadingImpl.invokeOnOpenGLThread(ThreadingImpl.java:206) 在 javax.media.opengl.Threading.invokeOnOpenGLThread(Threading.java:172) 在 javax.media.opengl.Threading.invoke(Threading.java:191) 在 javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:492) 在 processing.opengl.PGL.requestDraw(PGL.java:1155) 在 processing.opengl.PGraphicsOpenGL.requestDraw(PGraphicsOpenGL.java:1602) 在 processing.core.PApplet.run(PApplet.java:2141) 在 java.lang.Thread.run(未知来源) 引起:java.lang.NoSuchMethodError: javax.media.opengl.GL2ES2.glVertexAttribPointer(IIIZILjava/nio/Buffer;)V 在 processing.opengl.PGL.vertexAttribPointer(PGL.java:3318) 在 processing.opengl.PGL.drawTexture2D(PGL.java:1594) 在 processing.opengl.PGL.drawTexture(PGL.java:1507) 在 processing.opengl.PGL.endDraw(PGL.java:1110) 在 processing.opengl.PGraphicsOpenGL.endOnscreenDraw(PGraphicsOpenGL.java:5974) 在 processing.opengl.PGraphicsOpenGL.endDraw(PGraphicsOpenGL.java:1681) 在 processing.core.PApplet.handleDraw(PApplet.java:2290) 在 processing.opengl.PGL$PGLListener.display(PGL.java:2643) 在 jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:590) 在 jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:574) 在 javax.media.opengl.awt.GLCanvas$9.run(GLCanvas.java:1218) 在 jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1036) 在 jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:911) 在 javax.media.opengl.awt.GLCanvas$10.run(GLCanvas.java:1229) 在 java.awt.event.InvocationEvent.dispatch(未知来源) 在 java.awt.EventQueue.dispatchEventImpl(未知来源) 在 java.awt.EventQueue.access$200(未知来源) 在 java.awt.EventQueue$3.run(未知来源) 在 java.awt.EventQueue$3.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue.dispatchEvent(未知来源) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.run(未知来源)

【问题讨论】:

  • 试试jogamp.org/wiki/index.php/Downloading_and_installing_JOGL,也许你错过了什么。既然你说你刚刚升级了你的版本,那肯定是那里出错了。
  • jogamp.org/wiki/index.php/… ,另一个有用的页面。
  • 这里有同样的问题(Eclipse,JOGL2 使用 GL2ES2 上下文)。该方法似乎只支持两个替代参数;使用GLArrayData 实现指定数据,或传递long 来表示指向缓冲区的指针。这两种实现都需要指针数据,目前我不太确定可以从哪里获取。
  • 我刚刚考虑了一下,它可能希望数据驻留在 VBO 中。我会看看这是否有效。

标签: eclipse opengl processing java


【解决方案1】:

我可以确认 GLES20 函数 glVertexAttribPointer(int indx, int size, int type, boolean normalized, int stride, Buffer buf) 在 JOGL 的 GL2ES2 API 中不可用。

它已被替换为glVertexAttribPointer(int indx, int size, int type, boolean normalized, int stride, long ptr_buffer_offset)。

在程序中编译和链接依赖于属性的着色器之后,与其使用相关的高级方法如下:

  1. 将顶点加载到顶点缓冲区对象 (VBO) 中。
  2. 实例化一个对应的Index Buffer Object,用来通知OpenGL VBO 顶点需要迭代的顺序。
  3. 绑定到 VBO。
  4. 定义您对 glVertexAttribPointer 的调用,它会通知 OpenGL 您的顶点数据的结构。
  5. 使用glEnableVertexAttribArray启用属性。
  6. 绑定到您的索引缓冲区对象。
  7. 使用 glDrawElements 按照 IBO 指定的顺序绘制 VBO 顶点。
  8. 从 IBO 解除绑定。
  9. 禁用该属性。
  10. 与您的 VBO 解除绑定。

ptr_buffer_offset 然后引用该绑定缓冲区内的内部偏移量,因此要从缓冲区的开头读取,您只需指定 0L。致电glDrawElements 也是如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2020-08-22
    • 2016-03-28
    相关资源
    最近更新 更多