Simple2D-15(音乐播放器)使用 glfw 库
glfw 是一个专门针对 OpenGL 的 C 语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建 OpenGL 上下文,定义窗口参数以及处理用户输入。
这次打算使用 GLFW 替代掉 Simple2D 的那个简陋的 RenderWindow,以便简单地实现更多的功能,也是为了使用 ImGui 库。
获取 GLFW
你可以它官方网站的下载页获取 GLFW:

对应着,你可以选择源代码包进行编译。如果想简单一点的话,可以选择针对 Visual Studio 2013/2015 的预编译的二进制版本和相应的头文件。更详细的内容在这个链接,这里不再多说。接下来的主要内容是如何将 Simple2D 中的窗口部分更换为 GLFW。
Simple2D 使用 GLFW
要使 GLFW 正常工作,需要以下文件:

并将静态链接库和相应的头文件放到 Simple2D 中对应位置,最后在 VS2013 中添加 glfw3.lib。使用 GLFW 实例化出一个窗口需要以下代码:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int width = ;
int height = ; /* 初始化 GLFW */
glfwInit(); /* 设置窗口属性 */
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); /* 创建窗口 */
GLFWwindow* window = glfwCreateWindow(width, height, "Title", NULL, NULL);
if ( window == NULL ) {
glfwTerminate();
return -;
} /* 设置自消息回调函数 */
glfwSetKeyCallback(window, KeyCallback);
glfwSetScrollCallback(window, ScrollCallback);
glfwSetCursorPosCallback(window, MouseMoveCallback);
glfwSetMouseButtonCallback(window, MouseButtonCallback); /* 通知 GLFW 将我们窗口的上下文设置为当前线程的主上下文了 */
glfwMakeContextCurrent(window); /* GLEW 是用来管理 OpenGL 的函数指针的,所以在调用任何 OpenGL 的函数之前我们需要初始化 GLEW */
if ( glewInit() != GLEW_OK ) {
throw std::exception("");
} /* 告诉 OpenGL 渲染窗口的尺寸大小 */
glfwGetFramebufferSize(window, &width, &height);
glViewport(, , width, height); while ( glfwWindowShouldClose(window) == false )
{
glClearColor(, , 0.3, 1.0);
glClear(GL_COLOR_BUFFER_BIT); // 渲染指令 glfwSwapBuffers(window); /* 交换颜色缓冲 */
glfwPollEvents(); /* 检查有没有触发什么事件 */
} glfwTerminate();
return ;
}
运行上面的代码即可创建出一个窗口:

想在 Simple2D 中使用 GLFW 更换掉以前渲染窗口的代码很简单,只要根据上面的代码重新编写 RenderWindow 类即可。 RenderWindow 实现请参考源码。
使用 GLFW 后,使得很多操作变得简单。以前关于帧率控制的问题,使用 glfwSwapInterval(int interval) 函数即可。
GLFWAPI void glfwSwapInterval(int interval);
传入参数 0 时:不限帧率
传入参数 1 时:限定 60 帧
两帧间的时间间隔则使用 glfwGetTime() 来进行计算:
int nowFrameTime, lastFrameTime = glfwGetTime() * ;
while ( glfwWindowShouldClose(window) == false )
{
nowFrameTime = glfwGetTime() * ;
float frame_time = nowFrameTime - lastFrameTime;
lastFrameTime = nowFrameTime;
// TODO:
}
源码下载:Simple2D-14.rar
Simple2D-15(音乐播放器)使用 glfw 库的更多相关文章
- Simple2D-16(音乐播放器)ImGui 库介绍
什么是 ImGui IMGUI (Immediate Mode Graphical User interface),下载地址. ImGui 是一种比较新颖的 GUI 实现模式,适用于显示区域实时刷新的 ...
- 使用react native制作的一款网络音乐播放器
使用react native制作的一款网络音乐播放器 基于第三方库 react-native-video设计"react-native-video": "^1.0.0&q ...
- Swift - 制作一个在线流媒体音乐播放器(使用StreamingKit库)
在之前的文章中,我介绍了如何使用 AVPlayer 制作一个简单的音乐播放器(点击查看1.点击查看2).虽然这个播放器也可以播放网络音频,但其实际上是将音频文件下载到本地后再播放的. 本文演示如何使用 ...
- 仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)
转载请说明原出处,谢谢~~ 花了两天时间把仿酷狗的选项设置窗体做出来了,当然了只是做了外观.现在开学了,写代码的时间减少,所以整个仿酷狗的工程开发速度减慢了.今天把仿酷狗的选项设置窗体的布局代码分享出 ...
- 【竞品分析】Android音乐播放器的竞品分析
迄今为止最长的一篇博客,各位看官笑纳~~ 本次分析基于Android平台,选取了几款我体验过的播放器进行比较分析.主要分为两类,一类是大而全的,功能全面,可满足用户管理歌曲.导入导出歌单等多方面需求, ...
- Swift版音乐播放器(简化版),swift音乐播放器
这几天闲着也是闲着,学习一下Swift的,于是到开源社区Download了个OC版的音乐播放器,练练手,在这里发扬开源精神, 希望对大家有帮助! 这个DEMO里,使用到了 AudioPlayer(对音 ...
- Simple2D-14(音乐播放器)简介
接下来文章中,会介绍一个简单的程序——音乐播放器.通过编写一个音乐播放器在 Simple2D 中加入两个库:音频库 bass 和界面库 ImGui. 下面是音乐播放器的预览图: 播放器的功能比较简单, ...
- Swift版音乐播放器(简化版)
这几天闲着也是闲着,学习一下Swift的.于是到开源社区Download了个OC版的音乐播放器,练练手,在这里发扬开源精神. 希望对大家有帮助! 这个DEMO里.使用到了 AudioPlayer(对音 ...
- STM32实现Airplay音乐播放器
AirPlay是苹果公司推出的一套无线音乐解决方案,我们手里的iPhone.iPad甚至是Apple Watch等设备还有电脑上的iTunes都支持AirPlay,但是支持AirPlay功能的音响设备 ...
- SE Springer小组之《Spring音乐播放器》可行性研究报告三、四
3 对现有系统的分析 由于本次可行性分析主要是建立在团队自行实现一个音乐软件的目标上,并不是在一个现有系统的基础上开发改进的新系统.因此这里将分析一款市面上已经存在的音乐软件(以下称为W音乐),并为之 ...
随机推荐
- gridview 合并单元格 并原样导出数据
使用的方式都是比较简单的,asp.net 如何进行数据的导出有好多种方法,大家可以在网上找到, 一下提供一些合并并原样输出的一个简单的代码: public void ToExcel(System.We ...
- nyoj 幸运三角形
幸运三角形 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒 ...
- 关于 Vue 方法前面的美元符号
关于 Vue 方法前面的美元符号 学到这一段,不明白什么意思,然后手贱把 $ 删除了,出现未定义方法. vm.$watch('counter', function(nval, oval) { aler ...
- POJ2777(线段树裸题)
题目:http://poj.org/problem?id=2777 别忘了各地的return: 有可能输入的L<R,手动swap: 似乎是多组输入? pushup和pushdown的位置. (原 ...
- caffe跑densenet的错误:Message type "caffe.PoolingParameter" has no field named "ceil_mode".【转自CSDN】
最近看了densenet这篇论文,论文作者给了基于caffe的源码,自己在电脑上跑了下,但是出现了Message type “caffe.PoolingParameter” has no field ...
- phpstorm xdebug
xdebug安装 https://xdebug.org/wizard.php http://blog.csdn.net/zhyh1986/article/details/45172685 http:/ ...
- iview-admin打包笔记
在程序根目录右键打开cmd,输入 npm run build 这时就会进入打包的步骤,打包好之后就会在程序根目录出现一个dist的文件夹,里面有一个index.html文件和另一个dist的文件夹. ...
- Zabbix监控windows的CPU利用率和其他资源
zabbix的WEB端--配置-模板--Template OS Windows--项目--创建项目 名称:UserPerfCountercpu 键值:UserPerfCountercpu 数据类型:数 ...
- ubuntu卸载vsftpd出错
卸载vsftpd出错 $ sudo apt remove vsftpd Reading package lists... Done Building dependency tree Reading s ...
- appium+python自动化38-adb shell按键操作(input keyevent)
前言 接着上篇介绍input里面的按键操作keyevent事件,发送手机上常用的一些按键操作 keyevent 1.keyevent事件有一张对应的表,可以直接发送对应的数字,也可以方式字符串,如下两 ...