OpenGL之gult/freeglut/glew/glfw/glad的联系与区别

2023-05-16

转 https://blog.csdn.net/libaineu2004/article/details/105879521

转 https://blog.csdn.net/qq_40565033/article/details/107715956?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

1.OpenGL总览


OpenGL只有框架没有实现,换句话说就是OpenGL只有函数声明没有源文件实现,类似于接口和虚函数。所有的实现是显卡生产商提供。比如NVIDIA或者AMD就要自己实现OpenGL函数内容,所以不同的生产商可以对自己的产品提供优化,毕竟代码是自己写的。

OpenGL函数库相关的API有核心库(gl),实用库(glu),辅助库(aux)、实用工具库(glut),窗口库(glx、agl、wgl)和扩展函数库等。gl是核心,glu是对gl的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包,比aux功能强大(aux很大程度上已经被glut库取代)。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。

https://opengl.org/

2.gult


OpenGL Utility Toolkit

https://www.opengl.org/resources/libraries/glut/glut_downloads.php

里面有32位的库文件下载,glutdlls37beta.zip,但是版本太老了,理应被时代淘汰,不推荐使用。gult最后版本v3.7beta的历史可追溯至1998年8月,且该项目已经被废弃。它的许可证禁止任何人发布修改后的库代码。

这部分函数以glut开头,主要包括窗口操作函数,窗口初始化、窗口大小、窗口位置等函数;回调函数:响应刷新消息、键盘消息、鼠标消息、定时器函数等;创建复杂的三维物体;菜单函数;程序运行函数。gult对应的开源实现是freegult。

3.freeglut


FreeGLUT is a free-software/open-source alternative to the OpenGL Utility Toolkit (GLUT) library

因为OpenGL没有窗口管理的功能,所以很多热心的人写了工具来支持这些功能,比如早期的glut,现在的freeglut等。

freeglut完全兼容glut,是glut的代替品,开源,功能齐全。目前来看,freeglut 3.0版本比其它版本稳定,推荐使用。帕维尔在1999年12月1日开始freeglut的开发。目前,该项目几乎可以100%的替代原来的GLUT,只有少数差别(如,the abandonment of SGI-specific features,按钮盒子和动态视频分辨率)和 其他一小部分程序Bug。

http://freeglut.sourceforge.net/

4.glew


The OpenGL Extension Wrangler Library

glut或者freegult主要是OpenGL 1.0的基本函数功能;glew是使用OpenGL 2.0之后的一个工具函数。

不同的显卡公司,也会发布一些只有自家显卡才支持的扩展函数,你要想用这数涵数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识别你的平台所支持的全部OpenGL高级扩展函数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全部函数。

glew包含了OpenGL所需的核心。前面已经说过openGL的实现是显卡生产商,那么系统如何才能找到这些实现好的函数呢?而且不同的平台函数存放地方还不同,文件结构也不同。有没有一种方式能够自动找到OpenGL的函数?这就是glew的作用:用来找openGL的函数,并初始化,这样我们就能直接调用OpenGL的函数了。
http://glew.sourceforge.net/

5.glfw


glfw is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan development on the desktop. It provides a simple API for creating windows, contexts and surfaces, receiving input and events.

glfw无愧于其号称的lightweight的OpenGL框架,的确是除了跨平台必要做的事情都没有做,所以一个头文件,很少量的API,就完成了任务。glfw的开发目的是用于替代glut的。它是一个轻量级的,开源的,跨平台的library。支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等。

那么glfw有何优势呢?glut太老了,最后一个版本还是90年代的。freeglut完全兼容glut,算是glut的代替品,功能齐全,但是bug太多。稳定性也不好(不是我说的啊),glfw应运而生。

总之,glfw是glut/freegult的升级和改进。glfw是用来显示窗口和捕捉窗口事件的一套API,可以理解成Qt和windows平台的WPF。OpenGL只是一套控制GPU的规则,并没有对于跨平台窗口显示和事件进行规定,所以需要一个显示显卡渲染的窗口,这就是glfw的作用。

https://www.glfw.org/

6.glad


Multi-Language GL/GLES/EGL/GLX/WGL Loader-Generator

glad是继gl3w,glew之后,当前最新的用来访问OpenGL规范接口的第三方库。简单说glad是glew的升级版,就是说glew比较老,glad比较新。

https://glad.dav1d.de/

7.结论与项目使用


窗口管理
老产品:glut/freeglut
替代品:glfw

函数加载
老产品:glew
替代品:glad

项目开发,通常有三种组合
(1)freeglut+glew

(2)glfw+glew

(3)glfw+glad

8.

窗口工具库比较流行的有

GLFW
freeglut

加载函数库有
glad
GLEW

 

x1.源码和库下载


https://download.csdn.net/download/libaineu2004/12402662

更多的详情请访问我的另一篇博文:

https://libaineu2004.blog.csdn.net/article/details/105308235

x2.参考文献


学习教程
https://learnopengl-cn.github.io/ ++ https://learnopengl.com/

https://github.com/JoeyDeVries/LearnOpenGL ++ https://github.com/JoeyDeVries/Cell

http://www.opengl-tutorial.org/ ++ https://github.com/opengl-tutorials/ogl

OpenGL超级宝典visual studio 2013开发环境配置 GLTools
http://www.it165.net/pro/html/201504/38164.html

OpenGL+VS2017 环境配置(亲测好使)
https://blog.csdn.net/AvatarForTest/article/details/79199807

《OpenGL编程指南》
红宝书,Khronos小组编写的OpenGL官方权威指南

《OpenGL超级宝典》
蓝宝书,配套源码使用的是freeglut+glew

OpenGL GUI


NanoGUI 是基于opengl以及GLFW,GLAD,NanoVG,Eigen这些库形成的一个可视化GUI库,在窗口的设计上非常的简约,程序使用上也非常的方便。

https://github.com/wjakob/nanogui

https://github.com/memononen/NanoVG

https://nanogui.readthedocs.io/en/latest/

libqglviewer


libQGLViewer 是一个用以简化了Qt开发OpenGL三维浏览器的C++库。它提供了一些典型的3D查看器的功能,如能够移动相机使用鼠标。

http://libqglviewer.com/

https://github.com/GillesDebunne/libQGLViewer
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL之gult/freeglut/glew/glfw/glad的联系与区别 的相关文章

  • 不明确的 OpenGL 默认相机位置

    在我的Opengl程序中 在我应用透视投影矩阵之前 每当我绘制一些对象时 我都会在世界坐标系的原点处绘制它 但是几乎所有Opengl教程都指出相机 我的投影视图 位于原点朝向正 z 轴 这取决于您稍后如何处理投影矩阵中的 z 值 但是如果这
  • 纹理的内部格式

    看下面的OpenGL函数 void glTexImage2D GLenum target GLint level GLint internalFormat GLsizei width GLsizei height GLint border
  • 包含 Xcode 上添加的框架的标头

    我想使用一些框架 例如glew and cg所以我手动添加 通过右键单击项目 gt 将文件添加到 来将所需的框架添加到我的项目中 并选择正确的框架 问题是 当我尝试包含头文件时 Xcode 找不到其中任何一个 我希望这张图能帮助理解 And
  • 为什么 glClear 不清除我的屏幕?

    这是我编写的一个简单的 opengl 程序 我试图在绘制三角形之前清除屏幕 我在 init 函数中调用了 glClear 但是 它似乎无法清除屏幕 include
  • 如何在 SceneKit 中以编程方式将 png 纹理包裹在立方体周围

    我是 SceneKit 的新手 试图让一些基本的东西工作 但到目前为止还没有取得多大成功 由于某种原因 当我尝试将 png 纹理应用于 CNBox 时 我最终除了黑色之外什么也没有 这是我在 viewDidLoad 中的简单代码片段 let
  • LibGDX纹理混合与OpenGL混合功能

    在 libGdx 中 我试图创建一个成形纹理 采用完全可见的矩形纹理并将其遮罩以获得成形纹理 如下所示 在这里我在矩形上测试它 但我想在任何形状上使用它 我调查过本教程 http www learnopengles com tag addi
  • glColor4f() - alpha 值的效果

    我正在使用 glColor4f 令人惊讶的是 更改 alpha 即第四个参数 不会导致透明度发生任何变化 代码段是 const GLfloat squareVertices 0 5 0 5 0 0 0 5 0 5 0 0 0 5 0 5 0
  • OpenGL 使用着色器将 NV12 转换为 RGB24

    我尝试编写一个应用程序来在 OpenGL 中显示 YUV 图像 我使用此代码片段在 C 中成功将 Y UV 转换为 RGB source https blog csdn net subfate article details 4730514
  • GLSL 中统一浮点行为和常量浮点行为的不同

    我正在尝试在 GLSL 中实现模拟双精度 并且观察到一种奇怪的行为差异 导致 GLSL 中出现细微的浮点错误 考虑以下片段着色器 写入 4 浮点纹理以打印输出 layout location 0 out vec4 Output unifor
  • 在 3D 场景中实现“抓取”相机平移工具

    在我的场景中 我有想要 抓取 的地形 然后在移动光标时让相机平移 其高度 视图向量 视野等全部保持不变 因此 最初的 抓取 点将是世界空间中的工作点 我希望在拖动时该点保留在光标下方 我当前的解决方案是获取前一个和当前的屏幕点 取消投影它们
  • 移动/调整大小期间 opengl 窗口冻结

    我正在使用 LWJGL 开发游戏 移动窗口时 计划将来添加调整大小代码 渲染循环冻结 我希望它在移动时继续以某种方式运行 LWJGL 不包括 glutMainLoop Display属于OpenGL 而不是Java 相关代码 regular
  • 延迟阴影映射 GLSL

    我目前正在实施延迟渲染管道 但我仍坚持使用阴影贴图 我已经成功地将其实施到前向管道中 我所做的步骤是 获取灯光视图中的位置 转换为光视图剪辑空间 使用 0 5 0 5 获取阴影纹理坐标 检查深度 编辑 使用新结果图像更新代码 float c
  • 在 OpenGL 中实例化数百万个对象:提高每秒帧数

    我的最终目标是以 60 fps 渲染 100 万个不同尺寸和颜色的球体 我也希望能够在屏幕上移动相机 我已经修改了代码我正在学习的教程的这一页 http learnopengl com Advanced OpenGL Instancing尝
  • 如何在多采样纹理上渲染帧缓冲区对象?

    我目前有一个使用多个通道的渲染引擎 其中图像的各个部分在纹理上渲染 然后使用着色器进行组合 它有效 现在我想激活多重采样 我在这里读到 http www opengl org wiki Framebuffer Object Examples
  • 如何为 glDrawElements() 指定每个图元的颜色

    我想渲染一个索引几何体 所以 我有一堆顶点和关联的排序索引 我在用glDrawElements 渲染 2 个四边形 如下所示 现在 我知道我可以使用glColorPointer 用于指定每个顶点的颜色 我的问题是 我可以指定吗每个基元的颜色
  • OpenSceneGraph 将相机设置在初始位置

    我是第一次使用 OpenSceneGraph 我有点迷失 因为文档确实不太清楚 所以 我有这段代码加载一个带有房子的 obj 文件 并且我在我想要的 人 所在的地方淹没了一个小盒子 所以现在 我不想把那个盒子放在那里 而是想把相机放在那里
  • 使用普通画布/文本输出更新LayeredWindow

    有没有一种方法可以使用画布在表单上绘图 然后使用 updatelayeredwindow 这样表单就不可见 但文本可见 就像只显示文本的半透明表单一样 如果没有 那么有没有办法只用画布 opengl directx 制作某种半透明形式 我想
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • OpenGL 与 OpenCL,选择哪个以及为什么?

    哪些功能使 OpenCL 能够独特地选择 OpenGL 和 GLSL 进行计算 尽管有与图形相关的术语和不实用的数据类型 OpenGL 是否有任何真正的警告 例如 可以通过使用其他纹理将 a 渲染到纹理来完成并行函数评估 减少操作可以通过迭
  • 使用 OpenGL 渲染 QImage

    与我相关的其他问题 https stackoverflow com questions 20126354 render qimage from sooffscreenrenderer in qglwidget 我认为更核心的问题是 如何渲染

随机推荐

  • 电脑休眠、睡眠、待机的区别

    电脑休眠 xff08 Hibernate xff09 将系统切换到该模式后 xff0c 系统会自动将内存中的数据全部转存到硬盘上一个休眠文件中 xff0c 然后切断对所有设备的供电 这样当恢复的时候 xff0c 系统会从硬盘上将休眠文件的内
  • android的OnClick注解无效情况之一

    例子 当使用了 64 OnClick 注解 xff0c 貌似控件不用设置setOnClickListener this 监听了 xff0c 否则会干扰到这个注解无效 xff0c span class token comment 重置数据 s
  • androidStudio不能run运行,显示Loading devices...

    问题示图 试了n种解决方案 1 Clean project 再Rebuild project 2 点击File然后Invalidate andRestart 重启AndroidStudio并清理缓存 3 重启电脑 或者关机再开机 试了常用的
  • 探索Android中的Parcel机制(上)

    一 xff0e 先从 Serialize 说起 我们都知道 JAVA 中的 Serialize 机制 xff0c 译成串行化 序列化 xff0c 其作用是能将数据对象存入字节流当中 xff0c 在需要时重新生成对象 主要应用是利用外部存储设
  • Android动态获取手机是否是充电状态

    参考谷歌官方文档 https developer android google cn topic performance power 一 获取充电状态 在应用中执行某些操作 如软件云端备份 从服务器端获取最新版本号 从服务器端缓存最新软件安
  • EF_Using(问题)

    xfeff xfeff using 语句中使用的类型必须可隐式转换为 System IDisposable using 语句中使用的类型必须可隐式转换为 System IDisposable 在使用 EF 出现 using 语句中使用的类型
  • 100个不能错过的实用JS自定义函数

    1 原生JavaScript实现字符串长度截取 代码如下 span class token keyword function span span class token function cutstr span span class tok
  • Android.mk 编译报错undefined reference to

    当出现 undefined reference to xxx时 xff0c 对应的lib库已经添加到LOCAL STATIC LIBRARIES里面 xff0c 且 头文件已经已经添加时 xff0c 仍然报 undefined refere
  • yocto QT5 QSqlDatabase: QSQLITE driver not loaded

    yocto中默认编译出来的qt是不带有sql driver xff0c 即缺少插件库libqsqlite so 修改位置 xff1a 1 在xx meta qt5 recipes qt qt5 qtbase git bb中 xff0c 修改
  • systemd 介绍

    转自 xff1a https www linuxidc com Linux 2018 03 151291 htm 从 init 系统说起 Linux 操作系统的启动首先从 BIOS 开始 xff0c 接下来进入 boot loader xf
  • 详细讲解systemctl(附常用指令)

    目录 写在前面 systemd和systemctl systemd的配置文件目录 主要服务功能类型 服务状态 常用指令 切换系统模式 xff08 文本 界面模式等 xff09 systemctl配置文件的设置 写在前面 我发现systemc
  • Linux中systemctl详细理解及常用命令

    一 systemctl理解 Linux 服务管理两种方式service和systemctl systemd是Linux系统最新的初始化系统 init 作用是提高系统的启动速度 xff0c 尽可能启动较少的进程 xff0c 尽可能更多进程并发
  • ARM AArch64 GUN交叉编译工具下载官网

    Arm Developer https developer arm com tools and software open source software developer tools gnu toolchain gnu a downlo
  • GStreamer系列 - 基本介绍

    什么是Gstreamer xff1f Gstreamer是一个支持Windows xff0c Linux xff0c Android xff0c iOS的跨平台的多媒体框架 xff0c 应用程序可以通过管道 xff08 Pipeline x
  • 探索Android中的Parcel机制(下)

    上一篇中我们透过源码看到了 Parcel 背后的机制 xff0c 本质上把它当成一个 Serialize 就可以了 xff0c 只是它是在内存中完成的序列化和反序列化 xff0c 利用的是连续的内存空间 xff0c 因此会更加高效 我们接下
  • Caused by: java.lang.UnsupportedClassVersionError: Unsupported major.minor version 52.0 (无法载入的.类

    Caused by java lang UnsupportedClassVersionError com iov common crud node TPSAlipayConfig Unsupported major minor versio
  • ubuntu18 buildroot make xconfig make gconfig faile

    make xconfig sudo apt get install qttools5 dev make gconfig sudo apt get install libglade2 dev
  • qt5的configure选项说明

    一 配置选项查看及初步解释 通过下面命令查看都有哪一些编译配置选项 span class token punctuation span span class token operator span configure span class
  • qt build

    QT笔记 嵌入式QT交叉编译与移植 含OpenGL ES2 https blog csdn net weixin 40293570 article details 117731268
  • OpenGL之gult/freeglut/glew/glfw/glad的联系与区别

    转 https blog csdn net libaineu2004 article details 105879521 转 https blog csdn net qq 40565033 article details 107715956