【问题标题】:undefined reference glBindVertexArrayOES,glGenVertexArraysOES,glDeleteVertexArraysOES in eclipseeclipse 中未定义的参考 glBindVertexArrayOES,glGenVertexArraysOES,glDeleteVertexArraysOES
【发布时间】:2013-01-02 15:07:16
【问题描述】:

尝试使用 Android NDK 编译 C++ 代码,但这些错误不会消失

undefined reference to glBindVertexArrayOES
undefined reference to glGenVertexArraysOES
undefined reference to glDeleteVertexArraysOES 

在.mk文件中写了

LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog -lz  -landroid -lEGL

所有其他功能都完美找到了,我需要声明什么来使这些工作吗?

【问题讨论】:

  • 你有没有考虑过你的OpenGL ES实现不支持OES_vertex_array_object?
  • 在 glext.h 我看到 GL_API void GL_APIENTRY glBindVertexArrayOES (GLuint array); GL_API void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); GL_API void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays);

标签: opengl-es android-ndk


【解决方案1】:

此函数不在基本 opengl es 规范中,因此默认情况下未定义它们,而是作为扩展提供。

如果您使用的设备支持此扩展,您可以获取函数的物理地址并通过函数指针使用它。

它应该是这样的:

PFNGLGENVERTEXARRAYSOESPROC glGenVertexArraysOES;
PFNGLBINDVERTEXARRAYOESPROC glBindVertexArrayOES;
PFNGLDELETEVERTEXARRAYSOESPROC glDeleteVertexArraysOES;
PFNGLISVERTEXARRAYOESPROC glIsVertexArrayOES;

glGenVertexArraysOES = (PFNGLGENVERTEXARRAYSOESPROC)eglGetProcAddress ( "glGenVertexArraysOES" );
glBindVertexArrayOES = (PFNGLBINDVERTEXARRAYOESPROC)eglGetProcAddress ( "glBindVertexArrayOES" );
glDeleteVertexArraysOES = (PFNGLDELETEVERTEXARRAYSOESPROC)eglGetProcAddress ( "glDeleteVertexArraysOES" );
glIsVertexArrayOES = (PFNGLISVERTEXARRAYOESPROC)eglGetProcAddress ( "glIsVertexArrayOES" );

比你可以使用的功能。只是不要忘记此绑定发生在运行时,因此检查是否支持此功能是个好主意。如果设备不支持,则指针为0。

【讨论】:

  • 是的。 glBindVertexArrayOES 和 glGenVertexArraysOES 工作正常。但是当我使用 glDeleteVertexArraysOES 游戏崩溃 =/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 2015-01-14
相关资源
最近更新 更多