BGFX篇一:Example例子解读1

这个命名有点奇怪,就查了一下具体实现,原来是调用了系统的性能计数器,它是一个高性能的计时器。

QueryPerformanceCounter

float time = (float)( (bx::getHPCounter()-m_timeOffset)/double(bx::getHPFrequency() ) );

这里就是将过去的时间用秒的形式获得。

这里要注意:

CW是顺时针方向,CCW是逆时针方向

 

这里详细解析下下面的字段:

#_name的#表示不能再对_name里面的字符做宏扩展。

可以看到,首先"vs_metaballs初始化了*name变量,后面是个数组,每个数组又用type,data,size来进行初始化。

这里有个奇怪的事情,就是eds->size为什么是>1,默认初始化0。后面再看。

这里把shader的二进制也包括进来了。

这里我想要知道bin.h是怎么生成的。看了一下,应该还是用工具生成的。这里有个gnuwin32的坑,每次运行make文件,cmd都会打开一个新窗口,一闪而过,导致我根本看不到具体内容。

后来经过尝试,发现他是运行了当前文件夹下的._cache_make.exe。于是我先运行命令,再运行._cache_make.exe,就可以看到具体的内容了。

不过这样还是会有很多问题,后来我发现原来是我很早以前装了gnuwin32,所以现在用的一直是老的版本,我换成GitHub上的最新的链接下载的就可以了。

这里我们继续看一个事情:

可以看到shader的部分都已经封装好了。暂时没看到怎么进入底层的部分,继续跟进。

后面找到了多态的地方:

这是主程序进入的run函数,可以看到前面是常规的创建win窗口。

然后首先是创建线程:

这个线程就是准备渲染数据的线程。

然后线程首先执行一波:

这个init就是我们自己需要写的函数,里面也会调用bgfx:init这个函数,会把大部分需要的渲染类都初始化出来,包括s_ctx.

 

renderFrame是主线程的主循环。

这个renderCtx就是多态,会根据不同平台有不同的实现。

这里我们可以看到这样一个情况:

init函数是子线程里执行的,所以init里面创建shader的时候,是往cmdbuffer里面写入命令和参数,而执行这些命令的地方在主线程。

这样大致流程就清晰了。

这里的例子是metaball,可以看milo大佬的解析,这里就不展开了。

https://www.zhihu.com/question/23465136/answer/24670988

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yxriyin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值