2013-01-18 50 views
4

試圖編譯C++代碼的Android NDK glDeleteVertexArraysOES但這些錯誤不會消失未定義參考glBindVertexArrayOES,glGenVertexArraysOES,在eclipse

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

在.mk文件中寫道

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

所有其它功能被發現完美的是,我需要申報任何東西來使這些工作?

+0

您是否認爲您的OpenGL ES實現不支持OES_vertex_array_object? –

+1

在glext.h我看到GL_API void GL_APIENTRY glBindVertexArrayOES(GLuint array); GL_API void GL_APIENTRY glDeleteVertexArraysOES(GLsizei n,常量GLuint *數組); GL_API無效GL_APIENTRY glGenVertexArraysOES(GLsizei n,GLuint *數組); – Suvitruf

回答

1

這個函數不在基本操作規範中,所以它們沒有默認定義,但是作爲擴展提供。

如果您使用的設備支持此擴展名,您可以獲取函數的phsical地址並通過函數指針使用它。

應該這樣看:

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.

+0

Yeh。 glBindVertexArrayOES和glGenVertexArraysOES工作正常。但是當我使用glDeleteVertexArraysOES遊戲崩潰= / – Suvitruf