1. VS2013工程设置
VS在编译代码时,中间文件会默认保存在当前工程的Debug/Release目录下面,这对我们拷贝代码,提交git比较不利,因为我们没有必要将中间文件也上传到远程仓库。比较优雅的一种做法是,将工程的中间文件生成目录设置到源代码根目录的上一级目录中去。
-
选择所有配置,这会同时修改Debug/Release
-
修改输出目录和中间目录为../../temp/$(ConfigurationName)/$(ProjectName)
-
选择链接器,修改输出文件为../../bin/$(Configuration)/$(ProjectName).exe
-
选择调试,修改命令为../../bin/$(Configuration)/$(ProjectName).exe,如果不修改,运行的时候VS2013会提示找不到应用程序。
引入OpenGLES2.0库文件
-
设置头文件目录
-
设置链接库文件目录,用于提示VS2013寻找导入库文件
-
设置链接导入库
设置完之后,需要将DLL文件放入到生成可执行文件所在目录,即可运行时链接到OpenGL动态库。
3 初始化OpenGL
bool CellWinApp::initOpenGLES20()
{
const EGLint attribs[] =
{
EGL_SURFACE_TYPE, EGL_WINDOW_BIT, // 表面类型
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_DEPTH_SIZE, 24, // 深度
EGL_NONE
};
EGLint format(0);
EGLint numConfigs(0);
EGLint major;
EGLint minor;
_display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(_display, &major, &minor);
eglChooseConfig(_display, attribs, &_config, 1, &numConfigs);
eglGetConfigAttrib(_display, _config, EGL_NATIVE_VISUAL_ID, &format);
_surface = eglCreateWindowSurface(_display, _config, _hWnd, NULL);
EGLint attr[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE, EGL_NONE};
_context = eglCreateContext(_display, _config, 0, attr);
if (eglMakeCurrent(_display, _surface, _surface, _context) == EGL_FALSE)
{
return false;
}
eglQuerySurface(_display, _surface, EGL_WIDTH, &_width);
eglQuerySurface(_display, _surface, EGL_HEIGHT, &_height);
return true;
}
4. 销毁上下文
void CellWinApp::destroyOpenGLES20()
{
if (_display != EGL_NO_DISPLAY)
{
eglMakeCurrent(_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (_context != EGL_NO_CONTEXT)
{
eglDestroyContext(_display, _context);
}
if (_surface != EGL_NO_SURFACE)
{
eglDestroySurface(_display, _surface);
}
eglTerminate(_display);
}
_display = EGL_NO_DISPLAY;
_context = EGL_NO_CONTEXT;
_surface = EGL_NO_SURFACE;
}