在eclipse中处理P2D noSuchMethodError glVertexAttribPointer(IIIZILjava / nio / Buffer;)

时间:2013-12-26 23:56:45

标签: eclipse opengl processing java

我正试图在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)       at 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       at processing.opengl.PGL.vertexAttribPointer(PGL.java:3318)       at processing.opengl.PGL.drawTexture2D(PGL.java:1594)       at processing.opengl.PGL.drawTexture(PGL.java:1507)       at processing.opengl.PGL.endDraw(PGL.java:1110)       at processing.opengl.PGraphicsOpenGL.endOnscreenDraw(PGraphicsOpenGL.java:5974)       at processing.opengl.PGraphicsOpenGL.endDraw(PGraphicsOpenGL.java:1681)       在processing.core.PApplet.handleDraw(PApplet.java:2290)       at 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)       at java.awt.event.InvocationEvent.dispatch(Unknown Source)       at java.awt.EventQueue.dispatchEventImpl(Unknown Source)       在java.awt.EventQueue.access $ 200(未知来源)       在java.awt.EventQueue $ 3.run(未知来源)       在java.awt.EventQueue $ 3.run(未知来源)       at java.security.AccessController.doPrivileged(Native Method)       at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(Unknown Source)       at java.awt.EventQueue.dispatchEvent(Unknown Source)       at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)       at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)       at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)       at java.awt.EventDispatchThread.pumpEvents(Unknown Source)       at java.awt.EventDispatchThread.pumpEvents(Unknown Source)       在java.awt.EventDispatchThread.run(未知来源)

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. 将顶点加载到顶点缓冲区对象(VBO)中。
  2. 实例化相应的索引缓冲区对象,用于通知OpenGL VBO顶点需要迭代的顺序。
  3. 与VBO绑定。
  4. 定义对glVertexAttribPointer的调用,通知OpenGL顶点数据的结构。
  5. 使用glEnableVertexAttribArray启用该属性。
  6. 绑定到索引缓冲区对象。
  7. 使用glDrawElements按照IBO指定的顺序绘制VBO顶点。
  8. 从IBO解除绑定。
  9. 禁用该属性。
  10. 从你的VBO解开。
  11. ptr_buffer_offset然后引用该绑定缓冲区内的内部偏移量,因此要从缓冲区的开头读取,您只需指定0L。您拨打glDrawElements时也是如此。