概述

  本章节主要总结如何使用GLFW来创建Opengl窗口。主要包括如下内容:

OpenGL窗口创建介绍

  能用于OpenGL的窗口库有很多,常见的有glut、freeglut、SDL、GLFW等。glut基本已经被废弃,其他几个再不同场合都有不同的应用。GLFW为opengl superbible 6th & 7th中推荐的第三方开源窗口库。GLFW的特点大概总结如下

  1. 跨平台,能在window、Linux和wayland中使用;
  2. 支持OpenGL、OpenGL ES;
  3. 底层的可配置性;

  下面我们来实际看下使用GLFW的实际意义。

  OpenGL ES在嵌入式开发中实际比在PC上开发opengl的环境搭建似乎要复杂很多,通常嵌入式开发中使用EGL创建OpenGL渲染的surface,使用wayland创建窗口的surface来实现。在实际开发过程中,我们想通过在PC上开发EGL + OpenGl ES的程序,这个时候,如果平台不同,我们往往在不同平台上实现不同的窗口,如:

  1. window:OpenGL ES + EGL + Window系统窗口(实际运行还需要加OpenGL ES的模拟器,OpenGL.ES.3.0.Programming.Guide中有介绍高通芯片等模拟器的使用的章节);
  2. Linux: OpenGL ES + EGL + X11窗口;
  3. ARM: OpenGL ES + EGL + wayland窗口;

  window 窗口系统、X11窗口和wayland窗口的创建和窗口事件获取及处理方式各不相同,而GLFW所做的事情,就是提供统一的窗口创建的方法,使我们能在GLFW上开发与平台无关的OpenGL ES代码。

GLFW Window版编译介绍

  GLFW官网有详细的各个平台编译步骤介绍,在此我们针对Window + VS2005 + EGL + Mail模拟器进行进行介绍。


  • 下载CMake并安装(官网可直接尚在安装包进行安装);     
  • 下载Mail模拟器安装包,安装完成后,在安装路径下可以看待我们在开发过程中需要用到的头文件和相应的dll,大家可以点击mali-cube.exe来测试自己的机器是否能正常运行此模拟器,VM虚拟机对OpenGL版本的支持比较低,一般无法运行此虚拟机,因此大家可能在虚拟机上开发OpenGL ES会受到一些障碍;


  • 下载GLFW源码,使用CMake GUI编译GLFW;
  • 在CMake安装目录bin下找到cmake-gui.exe并运行;
  • 选择源码路径和编译路径;

                点击Configure进行配置
 

    完成后,我们得到了配置属性设置项,官网有对每项配置的介绍
 

 

  配置完成后我们点击Generate,即可完成项目文件的创建; 在build的目录下,我们可以使用vs2005 打开GLFW.sln并编译GLFW库;

  至此,编译部分大致介绍完成,大家在实际编译过程中可能会遇到其他问题,参考官网的介绍应该都能解决。

GLFW简单工程源码介绍

我们把GLFW编译出来的库和头文件复制到我们的OpenGL ES VS工程中(当然也必须添加模拟器的Dll),如下为实例代码:

#define GLFW_INCLUDE_ES2
#include <GLFW/glfw3.h>
void errorfunc(int error, const char* discription)
{
fputs(discription,stderr);
} void keyfunc(GLFWwindow* window, int key, int scancode, int action, int mods) //按键回调函数
{
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
{
glfwSetWindowShouldClose(window,GL_TRUE); //退出是销毁窗口
}
} int main()
{
GLFWwindow* windows;
glfwSetErrorCallback(errorfunc); if (!glfwInit())
{
exit(EXIT_FAILURE);
} windows = glfwCreateWindow(, , "test opengl windows", NULL, NULL); //创建窗口
if (!windows) {
glfwTerminate();
} glfwMakeContextCurrent(windows);
glfwSetKeyCallback(windows,keyfunc); while (!glfwWindowShouldClose(windows)) //渲染循环
{
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(....);
//do something about opengl
glfwSwapBuffers(windows);
glfwPollEvents();
}
glfwDestroyWindow(windows);
glfwTerminate(); return ;

OpenGL ES之GLFW窗口搭建的更多相关文章

  1. OpenGL ES for Android 环境搭建

    在Android上运行OpenGL ES程序需要用到GLSurfaceView控件,GLSurfaceView继承自SurfaceView并实现了GLThread,通过OpenGL ES进行绘制. O ...

  2. Opengl ES之FBO

    FBO介绍 FBO帧缓冲对象,它的主要作用一般就是用作离屏渲染,例如做Camera相机图像采集进行后期处理时就可能会用到FBO.假如相机出图的是OES纹理,为了方便后期处理, 一般先将OES纹理通过F ...

  3. OpenGL ES 3.0 基础知识

    首先要了解OpenGL的图形管线有哪些内容,再分别去了解其中的相关的关系: 管线分别包括了顶点缓冲区/数组对象,定点着色器,纹理,片段着色器,变换反馈,图元装配,光栅化,逐片段操作,帧缓冲区.其中顶点 ...

  4. Opengl ES之VBO和VAO

    前言 本文主要介绍了什么是VBO/VAO,为什么需要使用VBO/VAO以及如何使用VBO和VAO. VBO 什么是VBO VBO(vertex Buffer Object):顶点缓冲对象.是在显卡存储 ...

  5. Opengl ES之纹理贴图

    纹理可以理解为一个二维数组,它可以存储大量的数据,这些数据可以发送到着色器上.一般情况下我们所说的纹理是表示一副2D图,此时纹理存储的数据就是这个图的像素数据. 所谓的纹理贴图,就是使用Opengl将 ...

  6. Opengl ES之四边形绘制

    四边形的绘制在Opengl ES是很重要的一项技巧,比如做视频播放器时视频的渲染就需要使用到Opengl ES绘制四边形的相关知识.然而在Opengl ES却没有直接提供 绘制四边形的相关函数,那么如 ...

  7. 【Android Developers Training】 62. 搭建一个OpenGL ES环境

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  8. Android OpenGL ES 开发(二): OpenGL ES 环境搭建

    零:环境搭建目的 为了在Android应用程序中使用OpenGL ES绘制图形,必须要为他们创建一个视图容器.其中最直接或者最常用的方式就是实现一个GLSurfaceView和一个GLSurfaceV ...

  9. 深度剖析OpenGL ES中的多线程和多窗口渲染技术

    由 创新网小编 于 星期五, 2014-04-11 14:56 发表 移动设备中的CPU和GPU已经变得很强大,到处都是配备一个或多个高分辨率屏幕的设备,需要使用带有图形驱动器的复杂交互也日益增加.在 ...

随机推荐

  1. Excel 2003-单元格输入中带记忆功能

    最近有个同事问我,如何在Excel单元格输入中带记忆功能?其实很简单: 工具ó选项ó编辑ó将“记忆式键入”项选中ó确定: //附图[效果图]:

  2. django中怎么使用mysql数据库的事务

    Mysql数据库事务: 在进行后端业务开始操作修改数据库时,可能会涉及到多张表的数据修改,对这些数据的修改应该是一个整体事务,即要么一起成功,要么一起失败. Django中对于数据库的事务,默认每执行 ...

  3. eclipse zg项目学习

    一.基本知识 1.新增测试系统: xx/jsp:用于摆放jsp xx/src:放置java source 2.在项目上,右键,New-Folder,新建xx文件夹. 同样的方法,在xx文件夹上,右键N ...

  4. MongoDB服务无法启动,发生服务特定错误:100

    问题:MongoDB服务无法启动,发生服务特定错误:100 原因:没有正常关闭mongod服务,导致mongod被锁 解决方案:进入db文件夹,删除mongod.lock文件,然后重新启动服务即可

  5. 用Git发布版本笔记

    1.首先,如果是发布的Develop分支,先从master建立HotFix分支,提交到git并指定关联关系 (git branch --set-upstream-to=D..) 2.对H分支进行功能完 ...

  6. RigidBody组件的Is Kinematic

    RigidBody组件的Is Kinematic属性打上勾(设为true,使其不受物理引擎驱动,Wall是为了防止其移动,Person是为了防止其受到力不断旋转—看的心塞=v=) .is kinema ...

  7. [leetcode]632. Smallest Range最小范围

    You have k lists of sorted integers in ascending order. Find the smallest range that includes at lea ...

  8. MQ基础概念和介绍

    一.中间件 MQ是一种中间件产品,至于什么是中间件,中间件能干什么,参见以下链接: http://baike.baidu.com/view/23710.htm 二.WebSphere MQ的原理 We ...

  9. jmeter完成数据批量添加

    Jmeter结构如图 目的: 需要在每个组织下面分别添加5个设备资源 思路: 1.先登录平台 2.进入系统配置页面 3.获取到每个区域的ID 4.在每个区域下面添加设备资源 重点及难点: 1.登录加密 ...

  10. geoserver 通过代码实现发布地图服务

    GeoServer:代码实现批量发布地图服务 利用GeoServer发布WCS服务,那么如果我有很多数据需要进行发布,这样利用GeoServer提供的UI界面进行操作显然很不显示.那能不能利用GeoS ...