美文网首页
OpenGL基础之OpenGLES2.0的开发环境

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

作者: 田贝X | 来源:发表于2016-12-18 00:14 被阅读836次

    1. VS2013工程设置

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

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

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

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

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

      修改生成二进制文件路径

    引入OpenGLES2.0库文件

    • 设置头文件目录


      5.PNG
    • 设置链接库文件目录,用于提示VS2013寻找导入库文件


      6.PNG
    • 设置链接导入库


      设置导入库

    设置完之后,需要将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的开发环境

          本文链接:https://www.haomeiwen.com/subject/pyjomttx.html