第一次接触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