您的位置:首页 > 运维架构

OpenGL ES 学习教程(一) 打开一个窗口,什么都没有!

2015-11-29 17:57 441 查看
第一次接触OpenGL , 第一次学习OpenGL,来打开一个什么都没有的窗口。

本节重点:

Windows平台OpenGL初始化流程

在Windows上创建OpenGL ES 应用程序可以有两种选择,一是使用windows api来创建窗口,二是使用其它的库来创建。

既然是学习,那我们就使用 windows api来创建一个窗口,了解下OpenGL  ES 在Windows上面的初始化流程。



因为是一个空窗口,所以我们只是在Windows窗体程序基础上添加了 初始化 GLES的一个操作 InitDevice ,创建成功之后就进入到了 消息循环了。

bool initDevice()
{

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;

//! 1
m_EGLDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);

//! 2init
eglInitialize(m_EGLDisplay, &major, &minor);

//! 3
eglChooseConfig(m_EGLDisplay, attribs, &m_EGLConfig, 1, &numConfigs);

eglGetConfigAttrib(m_EGLDisplay, m_EGLConfig, EGL_NATIVE_VISUAL_ID, &format);
//! 4
m_EGLSurface = eglCreateWindowSurface(m_EGLDisplay, m_EGLConfig, m_hWnd, NULL);

//! 5
EGLint attr[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE, EGL_NONE };
m_EGLContext = eglCreateContext(m_EGLDisplay, m_EGLConfig, 0, attr);
//! 6
if (eglMakeCurrent(m_EGLDisplay, m_EGLSurface, m_EGLSurface, m_EGLContext) == EGL_FALSE)
{
return false;
}

eglQuerySurface(m_EGLDisplay, m_EGLSurface, EGL_WIDTH, &m_width);
eglQuerySurface(m_EGLDisplay, m_EGLSurface, EGL_HEIGHT, &m_height);

//! windows api
SendMessage(m_hWnd, WM_SIZE, 0, 0);
return  true;
}


初始化 GLES之后,就可以进行GL的API调用了。

比如这里设置视口,就是占用窗口多大的一块来显示。

glViewport(0, 0,(GLsizei )m_width, (GLsizei)m_height);


然后我们还调用API来设置了颜色

glClearColor(0, 0, 0.4, 1);


//初始化;
virtual void onInit()
{
glClearColor(0, 0, 0.4, 1);

glViewport(0, 0,(GLsizei )m_width, (GLsizei)m_height);
}


然后进入到消息循环,在空闲的时间进行 Render

//渲染函数;
virtual void render()
{
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

eglSwapBuffers(m_EGLDisplay, m_EGLSurface);
}


glClear 是表示要清除哪些缓冲区,GL_DEPTH_BUFFER_BIT 表示深度缓冲区  , GL_COLOR_BUFFER_BIT 表示颜色缓冲区。

glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);


eglSwapBuffers 用来交换缓冲区显示,只有执行了这个函数,我们绘制的东西才会在前台显示出来,不然就只能在后台哭了。
eglSwapBuffers(m_EGLDisplay, m_EGLSurface);
程序运行之后,创建窗口成功,并且前台颜色是我们设置的(0, 0, 0.4, 1)



有用的代码不多,没有太多可讲,就这样。

工程下载:http://pan.baidu.com/s/1sj6AA6L
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: