GLES 2函数在Visual Studio中不起作用

时间:2017-06-09 14:51:12

标签: android c opengl-es-2.0 native-activity

我正在使用Visual Studio Community 2017,但此版本中的本机活动与Visual Studio Community 2015中的相同。

我刚刚在Visual Studio 2017中创建了一个新的本机活动项目,使用加载此项目选项的默认程序。但是,每当我尝试使用独有的函数来打开gl es 2时,Visual Studio会为我使用的每个open gl es 2函数响应错误,例如“error:undefined reference to'glCreateShader'”。奇怪的是,以下代码可以工作,即使我删除了包含open gl es 1的pch文件中的行:

glClearColor(200, 200, 200, 1);
glClear(GL_COLOR_BUFFER_BIT);

如果将以下函数放入默认的本机活动项目(即使包括GLES2 / gl2.h,GLES2 / gl2ext.h和GLES2 / gl2platform.h),也会导致上述错误:

int prepareShader(GLuint shaderType, const char * shaderCode) {
GLuint shader = glCreateShader(shaderType);
int len = strlen(shaderCode);
glShaderSource(shader, 1, &shaderCode, &len);

}

我记得在Android Studio中发生了类似的错误,通过在cmakelists.txt中添加以下内容来解决此错误:

find_library(gl-lib
         GLESv2 )

find_library(egl-lib
         EGL )

target_link_libraries( # Specifies the target library.
                   native-lib
                   ${egl-lib}
                   ${gl-lib})

然而,我的Visual Studio项目不使用CMake。

有人可以告诉我如何在Visual Studio 2017中成功使用open gl es 2?

1 个答案:

答案 0 :(得分:0)

我的问题的解决方案是使用eglGetProcAddress加载open gl函数。这只意味着每个opengl函数必须在使用它们之前设置为指针,因为GLES2 / gl2.h没有定义函数(函数是在运行时定义的)。

为每个函数执行类似的操作可以解决问题。 (但是,我需要在GLES2 / gl2.h中删除函数原型才能使其工作)。

typedef GLuint(GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
PFNGLCREATESHADERPROC glCreateShader = (PFNGLCREATESHADERPROC)eglGetProcAddress("glCreateShader");