1

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

我刚刚在 Visual Studio 2017 中创建了一个新的本机活动项目,使用与此项目选项一起加载的默认程序。但是,每当我尝试使用专用于打开 gl es 2 的函数时,Visual Studio 都会针对我使用的每个打开的 gl es 2 函数返回一个错误,例如“错误:未定义对‘glCreateShader’的引用”。奇怪的是,即使我删除了 pch 文件中包含 open gl es 1 的行,以下代码仍然有效:

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 吗?

4

1 回答 1

0

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

为每个功能做这样的事情可以解决问题。(但是,我需要删除 GLES2/gl2.h 中的函数原型才能使其工作)。

typedef GLuint(GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
PFNGLCREATESHADERPROC glCreateShader = (PFNGLCREATESHADERPROC)eglGetProcAddress("glCreateShader");
于 2017-06-10T20:53:27.827 回答