OpenGL基础之OpenGLES2.0的开发环境

1. VS2013工程设置

VS在编译代码时,中间文件会默认保存在当前工程的Debug/Release目录下面,这对我们拷贝代码,提交git比较不利,因为我们没有必要将中间文件也上传到远程仓库。比较优雅的一种做法是,将工程的中间文件生成目录设置到源代码根目录的上一级目录中去。

  • 选择所有配置,这会同时修改Debug/Release

    OpenGL基础之OpenGLES2.0的开发环境_第1张图片
    修改配置

  • 修改输出目录和中间目录为../../temp/$(ConfigurationName)/$(ProjectName)

    OpenGL基础之OpenGLES2.0的开发环境_第2张图片
    2.PNG

  • 选择链接器,修改输出文件为../../bin/$(Configuration)/$(ProjectName).exe

    OpenGL基础之OpenGLES2.0的开发环境_第3张图片
    修改生成二进制文件路径

  • 选择调试,修改命令为../../bin/$(Configuration)/$(ProjectName).exe,如果不修改,运行的时候VS2013会提示找不到应用程序。

    OpenGL基础之OpenGLES2.0的开发环境_第4张图片
    修改生成二进制文件路径

引入OpenGLES2.0库文件

  • 设置头文件目录


    OpenGL基础之OpenGLES2.0的开发环境_第5张图片
    5.PNG
  • 设置链接库文件目录,用于提示VS2013寻找导入库文件


    OpenGL基础之OpenGLES2.0的开发环境_第6张图片
    6.PNG
  • 设置链接导入库


    OpenGL基础之OpenGLES2.0的开发环境_第7张图片
    设置导入库

设置完之后,需要将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;
}

你可能感兴趣的:(OpenGL基础之OpenGLES2.0的开发环境)