我正在使用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?
答案 0 :(得分:0)
我的问题的解决方案是使用eglGetProcAddress加载open gl函数。这只意味着每个opengl函数必须在使用它们之前设置为指针,因为GLES2 / gl2.h没有定义函数(函数是在运行时定义的)。
为每个函数执行类似的操作可以解决问题。 (但是,我需要在GLES2 / gl2.h中删除函数原型才能使其工作)。
typedef GLuint(GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
PFNGLCREATESHADERPROC glCreateShader = (PFNGLCREATESHADERPROC)eglGetProcAddress("glCreateShader");