UI的自动化代码生成需要来一份声明式UI描述语言,使用的最多的就是xml like的标记语言,比如cocos。但是实际上,xml我觉得是比较繁琐的一个标记语言,我更喜欢CSS这种,简单明了的,自己也尝试过定义一个简单的描述语言,最后发现,怎么那么像json。Google了下,还真发现了json类似的UI描述语言-QML,很符合我的胃口,QT用的也很多,但是没有去细细看它的UI描述文件,有些emmmmmm,学习不够深入。

ok,既然有目标了,css或者QML,细细想了下,UI设计的需求可能没有面向web的前端需求那么多,所以QML可能更适合APP的UI设计。CSS的文法只有找到2.2的,官网说明是可以使用LALR

最近一段时间给引擎加了GUI,从零开始构建GUI。

因为引擎的底层渲染基本已经算是一个可用的版本,所以上层加GUI,相对容易一些,就是大量控件需要写。

这个GUI,希望同时可以用于Game UI和编辑器UI。

为什么不用现有的GUI库呢,比如QT,C#等等。

一个原因是想跨平台,一个原因是现在的独立显卡性能比十多年前好太多,一个GUI所需要的GPU性能,集显都已经可以满足,一个是随着DX12,Vulkan的普及,已经进入到高并发CPU,高并发GPU的一个阶段,代码的架构可以让GUI、消息在客户端内部不受制于效率,不影响逻辑效率。

现有的做的比较

前段时间,改造了下python的缩进,改成了{}的形式。

1、为什么选python

其实是想给自己的玩具引擎接入脚本,游戏脚本其实lua是比较出名的,但是lua还是小众,支持上远没有python那么丰富,当然效率肯定比原生的python要高,为什么说原生,因为实际上python有很多的jit backend,效率其实也还不错。平时工作写的游戏脚本也是python,也对python优化过,实际上对py更熟悉。 当然其实很想用C#像Unity那样。

2、动机

python是个很不错的语言,但是对于缩进这个还是不能忍,每次换个环境写代码,缩进配置是个很麻

这两天给引擎加了并发,同屏900个模型,同时播放骨骼动画,可以基本上把所有核载满,测试环境:

  • 6800k,4.18GHz
  • 模型900个,7000面,总共(630W面)基本材质NdotL

上一个图: engine-cocurrency01

最近,把玩具引擎的动画系统的雏形搞定了,包括max的导出器。
蒙皮和骨骼都是相对TPOSE的局部空间的运算,没有使用骨骼空间,感觉这样可以提高一点并发性。
比较麻烦的是存储和读取,需要Read/Write一样的流程,如果有比较好的轻度序列化/反序列化库就会方便很多,或者用模板也可以,有待改善。
上个小图~~
anim-beta

目的

提高引擎的并发性,减少回调等待。

进行中...

暂时烂尾

  • 1.现阶段引擎的任务种类固定的几个,而且前后顺序比较单一
  • 2.现有的并行任务(称不上并发了...)架构已经能把cpu炸得差不多
  • 3.后面编辑器完善,再考虑这个功能。。。

早在之前的Spectre Variant的补丁安装之后,就出现用不了VTune,那个时候还能注册表绕一下,这次换固态重装系统,直接用了2019 LTSC,没办法改注册了表了,但是可以有取巧的办法,把Win10用的cpu微代码(mcupdate_GenuineIntel.dll)换回以前的,这样能解决问题,但是也会变得不安全,绕远了...

因为这个dll,网上找也不放心,那就google下,发现了这篇

因为要使用VTune的advanced hotspot,这是hardware event based sampling collection, 所以可以分析的更加准确一点,之前用得2016得版本,无法使用这个功能,可能还不支持win10或者是broadwall-e处理器,所以换了2018试试,但是刚用,就BSOD了,google了好久,最后是猜测因为对meltdown和spectre漏洞得修复,禁止了一些指令,导致这个没法使用,

为了用上https,然后chrome上显示是Secure的图标,需要折腾一下ssl证书,用了下letsencrypt。
过程大概就是安装一个certbot,然后执行申请,这个网上搜一下到处都是,然后我的服务器是放在家里的,也就是在NAT后面,那就意味着80端口,443端口都是没办法从公网访问的,所以证书申请基本上就GG了,因为Letencrypt连不到你的服务器。
好在,支持DNS认证:

certbot certonly --manual -d xxxx.example.com --preferred-challenges dns

最近用markdown写东西的时候,编辑的时候,总是在原始内容的开头多了一个换行,但是数据从数据库拿出来还是正常的,但是ajax接受到之后就多了一个换行,服务端后端也查过echo "";也是没问题的,google之后,发现还真有这样的问题,php require一个文件之后,在下次echo会增加一个换行...,有点神奇...

参考

半年时间,断断续续,过了一遍LL1语法分析,给json做了一个LL1 Parser。平时json用得挺多,也是可以随手撸一个差不多可以用的解释器,只不过想从语法层面构造一个更快的解释器,显然这个别人都是做过了,自己也想撸个,那么得复习下语法分析咯。

LL1是一个从左向右扫描,自上而下的预测分析算法,但是要使用LL1进行语法分析,需要先对Grammar进行分析,判断是不是能够使用LL1。使用LL1,需要构造预测分析表,构造预测分析表需要计算Grammar的FirstSet和FollowSet,而在计算这两个集合之前,需要对Grammar消除左递归和提取公共左因子。

FirstSet的定义如下:

上周末,宅了两天,用php把markdown撸了一遍,可以用markdown愉快的写文章了。
还是接着分析下markdown的流程,看几个核心函数。

  • _RunBlockGamut
  • _RunSpanGamut
  • _HashHTMLBlocks
  • _FormParagraphs

在markdown的主函数里面,处理完tab符号之后,就调用了_HashHTMLBlocks,这个函数先处理了嵌套的html元素,类似:

# First, look for ne

    碎碎念:

    1. 为什么其他源码不看,看markdown源码?

    因为,要用使自己的博客支持markdown。

    2. 为什么不用已有的markdown php插件?

    因为,码农的劣根性是造轮子。

    3. 为什么不直接用perl?

    因

bb8,嗯就是星战那个球形机器人,爆照:

其实已经有得买,但是有点贵,国外有好多大神自己制作了,制作方式有好多种,暂时没想好头部怎么做,身体大概这样设计下:

一开始用的CS骨骼,其实也挺好的,但是一些问题:

1. 脊椎旋转,手臂的朝向是相对地面不变的

2. 手臂肩骨不能绕X轴旋转

1. CMake版本控制

cmake_minimum_required(VERSION major.minor)


2. 加个project,嗯,一个Solution

project(xxxx CXX)


3. 加个子项目,subproject,对应以前用的SUBDIRS

add_subdirectory(xxxxx)


4. 加入includ