概述

  本章节主要总结如何使用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. 在JSP页面中显示动态时间

    源地址:http://blog.csdn.net/aitcax/article/details/41285305 静态时间: 1.页面首部添加 <%@page import="java ...

  2. Hibernate 中的锁( locking )

    业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种,也可能是几个小时),数 ...

  3. SQL 变量、 运算符、 if 、while

    变量: SQL语言也跟其他编程语言一样,拥有变量.分支.循环等控制语句. 在SQL语言里面把变量分为局部变量和全局变量,全局变量又称系统变量. 局部变量: 使用declare关键字给变量声明,语法非常 ...

  4. Electron mouse events 参数解析

    1.https://electronjs.org/docs/api/web-contents 2.通常用: monitorEvents(document.body, 'mouse')  检测正常的值: ...

  5. docker-composer

    1.安装docker-composer   参考官方 安装1.20.1 sudo curl -L https://github.com/docker/compose/releases/download ...

  6. form 表单排序

    <html>  <head></head>  <body>   <form class="form-inline">  ...

  7. IBM MQ 与spring的整合

    文件名:applicationContext-biz-mq.xml 新浪博客把里面的代码全部转换成HTML了,所以无法粘贴 可以查看CSDN里面的:http://blog.csdn.net/xiazo ...

  8. jxl 创建excel

    public static void performanceExcel(String sCurrPath,List<Record> list, String begin,String en ...

  9. Django模型之Meta详解

    Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.而可用的选项大致包含以下几类 abstract 这个属性是定义当前的模型是不是一个抽象类.所谓抽象类是不会对应数据 ...

  10. 编译安装bluez5.44

    1.下载 2. configure 提示需要glib 3.yum install glib 4.还是提示glib 5.yum install glib-devel 下载编译glib make inst ...