c组件库
文章平均质量分 72
登高思危-少言勿躁
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
组件:c语言基于统计的反比例负反馈定时器
背景介绍通常游戏帧率的微小浮动并不太会影响用户体验,人的视觉感受能力计较低。一般仅需要使用简单的休眠来控制帧率就满足需求。但在音频播放时,这种定时器迎来巨大的挑战。人的耳朵能感受到的音乐质量通常很高,微小的频率震荡都可能引起不适。曲有误,周郎顾。说的就是这种情况。更苛刻的是声卡接口的特殊性,对于以60帧采样的音频流,每一块长度为 1 / 60秒。如果播放频率大于60帧,那么由于播放过快,导致块之间形成空隙,听起来会有颤音。如果播放过慢,那么播放缓冲区将随着时间逐渐填满,并逐渐与原始音轨发生滞后差原创 2022-04-26 12:00:51 · 1299 阅读 · 2 评论 -
组件:c语言2幂采样平均帧率统计
背景介绍帧率统计常用于游戏限帧,视频音画同步等地方。是时间类组件的重要部分。基本思路1.2幂长度的环形缓存区能便于计算。2.每帧采样并计算帧间间隔填入缓存区。3.每帧都利用统计的帧缓冲计算平均帧率。使用这种方式,每一帧都能得到正确的平均帧率,仅计算进出缓冲的时间间隔效率高。1.最终使用案例https://bitbucket.org/mm_longcheng/mm-core/src/dev/mm/src/core/mmFrameStats.hstatic void MyTes原创 2022-04-26 10:45:10 · 3541 阅读 · 0 评论 -
用vulkan写个引擎 (四)PBR着色器
PBR全称(Physicallly-Based Rendering),基于物理的渲染。本文将提供一份GLSL实用型着色器。对于理论部分网络上已经有太多文章了。仓库:https://bitbucket.org/mm_longcheng/mm-vulkan扣扣交流群:554329899一、着色器入参问题对于着色器入参的不同会导致着色器实现的不同1. 顶点着色器的顶点属性,是否有骨骼蒙皮。2.片段着色器对于PBR需要的采样器的提供程度不同,而顶点着色器传过来的数据也有不同。我的方案是将入参原创 2022-03-28 09:55:28 · 1756 阅读 · 0 评论 -
用vulkan写个引擎 (三)ui组件
ui组件也许是最令人着迷的部分。这部分最复杂的要数文字排版系统,比较重要的部分分别是属性集部件,信号槽部件,布局系统。相对复杂的部分是图片顶点数据拼装。一、统一布局坐标系为了可以适配动态变化的窗体大小,我参考了cegui的“The Unified Co-ordinate System”。它使用两个量来表达一个维度(offset, scale)。offset代表标量,scale代表给予父节点的附加量。当我们定位一个距离右边缘10单位的位置时,就可以使用(-10, 1)来表示。当父窗口的大小发生变动时可原创 2022-03-03 14:04:12 · 4721 阅读 · 0 评论 -
用vulkan写个引擎 (二)vk组件
这篇文章开始展开介绍工程的组织方式和组件模块。首先从vulkan组件开始。大部分文章都是把官网例子重复一遍,或是罗列接口说明,根本不足以用在生产环境。注意,文章主要表述组件的功能和要点,和它们之间的关联配合,并不会大面积的罗列代码,如果想参考源码,可以直接拉取仓库查看。仓库:https://bitbucket.org/mm_longcheng/mm-vulkan扣扣交流群:554329899我们的接口需要做到哪些功能:1.vulkan运行时环境的启动和关闭。2.与原生os层接口交互,创建原创 2022-03-03 01:10:49 · 1112 阅读 · 0 评论 -
用vulkan写个引擎 (一)综述
https://zhuanlan.zhihu.com/p/466830308自己写个游戏引擎,这是个有趣的工程实践,vulkan的设备覆盖率已经非常高了。android 7.0以上的设备占比75%左右,iphone 6以上设备90%左右,桌面平台基本都支持,可以预见是个高收益的渲染接口。鉴于本人精力有限才疏学浅,我仅支持vulkan渲染接口,如OpenGL是不支持的。在工程组织方面,考虑良久,最终选择直接使用原始IDE工程,下载完毕即可打开编译调试,最大限度避免卡环境卡编译。支持平台:android原创 2022-02-28 01:40:42 · 7225 阅读 · 0 评论 -
组件:c语言版本事件集EventSet
背景介绍相信做过界面编程的人都会对事件回调机制不陌生。事件的概念抽象了对象间的通讯机制,解耦了不同类型互相强引用的情况,将对象的关系用一种类似连接电话线的方式简化。而实现一套事件系统需却不简单。通常我们需要满足的案例情况:a.静态函数和成员函数(当然c不需要考虑成员函数)b.在事件被派发过程中如果产生了解注册,系统不能崩溃c.是否考虑多线程d.事件系统通常需要一个事件被多个函数注册的情况基本思路我们设计时仅考虑简化了的情况,我们将以链表保存注册函数。需要考虑派发过程中的解注册。以智能指原创 2021-10-28 14:01:39 · 663 阅读 · 0 评论 -
组件:c语言版本字符串String
背景介绍为什么大多数人选择c++而不是c?我想可能是因为c标准里面没有方便使用的字符串"string"。虽然c标准确实不应该规定字符串实现,但是作为最终使用者的我们,还是迫切希望能有一份开箱即用,并且拥有现代字符串的品质,避免重造轮子的同时也能满足日常需要。基本思路// clang generally mode simplify string.// https://github.com/llvm-mirror/libcxx/blob/master/include/string// http原创 2021-10-28 11:02:42 · 419 阅读 · 0 评论 -
组件:c语言版本属性集PropertySet
背景介绍我想使用过QT的同学会比较熟悉里面的一个概念"属性"Property。用过CEGUI的人也会发现里面有一个小型的“属性集”PropertySet。它们通常被集成在基础组件中,被用来做对象的属性设置接口,这套系统为配置文件和界面布局工具带来了便利。int value = 0;myType t;t.setValue("A", "123");t.getValue("A", &value);以上就是较为常用的方式,通过字符串的设置,来将属性数值原创 2021-10-28 04:16:20 · 572 阅读 · 0 评论
分享