07 2017 档案
摘要:使用 BASS 和 ImGui 实现音乐播放器 MusicPlayer。 将播放器和一个文件夹关联起来,程序刚开始运行的时候就从该文件夹加载所有音频文件。而文件夹的路径则保存在配置文件中,所以程序的第一步就是读取配置文件。 1、读取配置文件 配置文件以 XML 格式进行储存,使用 TinyXml 库
阅读全文
摘要:BASS 简介 BASS是一个在多个平台上用于软件的音频库。其目的是为开发人员提供功能强大且高效的示例流(MP3,MP2,MP1,OGG,WAV,AIFF),MOD 音乐(XM,IT,S3M,MOD ,MTM,UMX),MO3 音乐(MP3 / OGG压缩MOD)和录音功能。提供了 C / C ++
阅读全文
摘要:要把 ImGui 应用到项目中,先拷贝方框中的源文件到项目: 这些文件是 ImGui 的实现源码,可作为第三方库新建一个文件夹进行放置。 接下来是渲染部分的代码,项目可能使用 DirectX 或 OpenGL 进行渲染。Simple2D 使用的是 OpenGL3,所以打开 examples -> o
阅读全文
摘要:什么是 ImGui IMGUI (Immediate Mode Graphical User interface),下载地址。 ImGui 是一种比较新颖的 GUI 实现模式,适用于显示区域实时刷新的程序里面。在 Simple2D 上实现 GUI,如果要自己编写一个 GUI 库,这是一件很困难的事。
阅读全文
摘要:glfw 是一个专门针对 OpenGL 的 C 语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建 OpenGL 上下文,定义窗口参数以及处理用户输入。 这次打算使用 GLFW 替代掉 Simple2D 的那个简陋的 RenderWindow,以便简单地实现更多的功能,也是为了使用 I
阅读全文
摘要:接下来文章中,会介绍一个简单的程序——音乐播放器。通过编写一个音乐播放器在 Simple2D 中加入两个库:音频库 bass 和界面库 ImGui。 下面是音乐播放器的预览图: 播放器的功能比较简单,音频播放使用了 bass 库,界面则是使用 ImGui 库。
阅读全文
摘要:要实现 Signal-Slot,Signal 类中应该拥有一个保存 std::function 的数组: 接下来将会按照下图中可能出现的问题设计 Signal-Slot: 1、当对象 A 被摧毁时,funcA 应该自动从 vector 中移除。 要实现自动管理操作,最好的方式是使用 C++ 的智能指
阅读全文
摘要:了解 QT 的应该知道,QT 有一个信号槽 Singla-Slot 这样的东西。信号槽是 QT 的核心机制,用来替代函数指针,将不相关的对象绑定在一起,实现对象间的通信。 考虑为 Simple2D 添加一个类似的信号槽,实现对象间的通信。当然,功能比较简单,不过对于 Simple2D 就足够了。最终
阅读全文
摘要:这是重构渲染器的最后一部分了,将会给出一个 demo,测试模板测试、裁剪测试、半透明排序等等: 上图是本次 demo 的效果图,中间的绿色图形展现的是模板测试。 模板测试 使用模板测试需要两个 Pass,第一个 Pass 绘制圆的时候,把圆范围内的模板值设置为 1,。在时候 p1 绘制好圆后,再使用
阅读全文
摘要:BlockAllocator 的内存管理情况可以用下图表示 整体思路是,先分配一大块内存 Chunk,然后将 Chunk 分割成小块 Block。由于 Block 是链表的一个结点,所以可以通过链表的形式把未使用的 Block 连接起来,并保存到 pFreeLists 中。当我们向 BlockAll
阅读全文
摘要:假如要渲染一个纯色矩形在窗口上,应该怎么做? 先确定顶点的格式,一个顶点应该包含位置信息 vec3 以及颜色信息 vec4,所以顶点的结构体定义可以这样: 然后填充矩形四个顶点是数据信息: 分配一块内存,将内存类型转换为 Vertex,最后设置数据。上面只是用了4个顶点,显然还要设置索引数据: 有了
阅读全文
摘要:Pass,渲染通路,一个渲染通路指的是一次像素处理和一次顶点处理,也就是指的是一次绘制。简单来说就是顶点数据在渲染管线中走一遍最后绘制。 渲染粒子系统的粒子时,需要开启 OpenGL 的混合模式,并使两个颜色相加。如果同一时间进行多张图片的绘制,并且这些图片的渲染并不需要开启混合模式。这时渲染的最终
阅读全文
摘要:Shader 只是进行一些简单的封装,主要功能: 1、编译着色程序 2、绑定 Uniform 数据 3、根据着色程序的顶点属性传递顶点数据到 GPU 着色程序的编译 Simple2D 只支持顶点着色器和片段着色器,暂不支持其他着色器。 OpenGL 绘制方式 使用openGL图形库绘制,都需要通过o
阅读全文
摘要:事实上,前面编写的渲染器 Renderer 非常简陋,虽然能够进行一些简单的渲染,但是它并不能满足我们的要求。 当渲染粒子系统时,需要开启混合模式,但渲染其他顶点时却不需要开启混合模式。所以同时渲染粒子系统和其他纹理时会得不到想要的结果,渲染器还存在许多的不足: 1、当渲染许多透明图形时,没有对其进
阅读全文