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

2016-12-18  本文已影响836人  田贝X

1. VS2013工程设置

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

引入OpenGLES2.0库文件

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

猜你喜欢

热点阅读