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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值