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 ,创建成功之后就进入到了 消息循环了。
初始化 GLES之后,就可以进行GL的API调用了。
比如这里设置视口,就是占用窗口多大的一块来显示。
然后我们还调用API来设置了颜色
然后进入到消息循环,在空闲的时间进行 Render
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
本节重点:
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
相关文章推荐
- tomcat CATALINA_BASE环境变量配置
- shell 11-29
- 一张图解释Hadoop IPC
- nginx---别名(alias)在ci框架的应用
- 【Linux学习笔记】我的vim配置
- linux下分区、格式化、挂载的命令
- linux 文件系统 & 文件查找 & 文件链接
- 使用openshit在ubuntu14.04下一键部署openstack(juno版本)
- 全新 Mac 安装指南(编程篇)(环境变量、Shell 终端、SSH 远程连接)
- 视频里人流跟踪统计 Counting People by Tracking in Video
- Maven配置自动化部署项目到tomcat
- hadoop学习005
- 从零开始写javaweb框架笔记4-在IDEA中配置Tomcat
- OpenCV颜色直方图
- centos iscsi target, win7 iscsi initiator实验
- linux shell
- linux 下C++开发工具
- Lipo - 如何为ARMv7/ARMv7s/ARM64架构 创建通用文件(Universal Files)
- linux日常管理-rsync后台服务方式-2
- 安装完最小化RHEL/CentOS 7后需要做的30件事情