2012-09-19 15 views
5

Quiero usar VAO en mi aplicación native-c para Android.android-ndk, glGenVertexArraysOES no encontrado

El problema es, que GL_OES_vertex_array_object se apoya y que incluso puede obtener No se encontraron las direcciones de glBindVertexArrayOES y glDeleteVertexArraysOES pero glGenVertexArraysOES.

¿La presencia de GL_OES_vertex_array_object significa que se puede acceder a todas estas funciones?

Mi código para VAO inicialización:

std::string vao = "GL_OES_vertex_array_object"; 

if (isExtensionSupported (vao.c_str()) != 0) 
{ 
    LOG (vao << " supported"); 
    glBindVertexArrayOES = (PFNGLBINDVERTEXARRAYOESPROC)eglGetProcAddress ("glBindVertexArrayOES"); 
    if (!glBindVertexArrayOES) 
     LOG ("Can't get proc address: glBindVertexArrayOES"); 

    glDeleteVertexArraysOES = (PFNGLDELETEVERTEXARRAYSOESPROC)eglGetProcAddress ("glDeleteVertexArraysOES"); 
    if (!glDeleteVertexArraysOES) 
     LOG ("Can't get proc address: glDeleteVertexArraysOES"); 

    glGenVertexArraysOES = (PFNGLGENVERTEXARRAYSOESPROC)eglGetProcAddress ("glGenVertexArraysOES"); 
    if (glGenVertexArraysOES) 
     LOG ("Can't get proc address: glGenVertexArraysOES"); 
} 
else 
{ 
    LOG (vao << " not supported"); 
} 

Por supuesto me sale el mensaje de registro

 
Can't get proc address: glGenVertexArraysOES 

Mi Android.mk (se ha reducido un poco):

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := smart 
LOCAL_SRC_FILES := Base/Node.cpp 
... 

LOCAL_LDLIBS := -llog -landroid -lGLESv2 -lEGL 
LOCAL_STATIC_LIBRARIES := nv_and_util 

include $(BUILD_SHARED_LIBRARY) 

$(call import-add-path, C:/NVPACK/TDK_Samples/tegra_android_native_samples_v10p00/libs/jni) 
$(call import-module,nv_and_util) 

Modelo del dispositivo Samsung i9003 con Android 2.3.5

+0

¿Qué estás tratando de lograr? Por favor, copie algunos fragmentos de código. ¿Cómo se ve tu archivo MAKE? ¿En qué Libs confías? –

+0

Vuelva a leer, por favor, actualicé la pregunta. –

+0

¿Es su dispositivo "real"? Espero que no uses un emulador de Android que simule un Samsung i9003, ¿verdad? Encontré [esta publicación] (http://www.cocos2d-x.org/issues/1229) en la que podría estar interesado. "Precaución: OpenGL ES 2.0 actualmente no es compatible con el emulador de Android. Debe tener un examen físico dispositivo de prueba con Android 2.2 (nivel de API 8) o superior para ejecutar y probar el código de ejemplo en este tutorial ". –

Respuesta

2

Si ese es realmente tu código, entonces el error es que te falta un '!'. Compare:

if (!glDeleteVertexArraysOES) 

a

if (glGenVertexArraysOES) 
1

Acabo de probar esto ....

Reemplazar:

#include <GLES2/gl2ext.h> 

Con esta:

#define GL_GLEXT_PROTOTYPES 
#include <GLES2/gl2ext.h> 

El macro GL_GLEXT_PROTOTYPES se debe definir antes de incluir gl2ext.h. No hay necesidad de definir las funciones, explícitamente.