https://github.com/crazii

开源的主要原因是一个人写不动了, 而且已经很久没更新代码了. 希望有人能够感兴趣, 提供贡献.

距离上次更新日志已经很久了, 中间大概加了以下feature: (mile stone 3: scene & effects)

  1. 放弃 MFC插件, 使用 Qt 插件 (DPI适应不用自己写了, 而且跨平台, 理论上编辑器也可以上Mac/Linux)
  2. 添加了CSM (shadow map)
  3. 加了PostFX框架, 加入了HDR, HBAO, TAA(仅静态).
  4. Android长时间未维护, 开源前把bug修了. 备注一些OpenglES上CSM遇到的bug:
    1. glViewport 不影响glClear的区域, 要用glScissor 还有depth/color mask会影响glClear
    2. 2. textureProj传入的z是和zbuffer比较的,所以应该在[0,1]范围内, 这和d3d不太兼容, 多一步NDC到zbuffer[0,1]的映射.
  5. 水, 草, 大气 等还没有时间实现
  6. 去除vsandroid, 去除vs2015之前的支持, 目前只支持vs2015和vs2017, 支持直接编译win32和android.
  7. Android改为static build, 只留一个.so, 安卓不是必须的, 以前是一堆so, 这次算是提前准备吧. 因为很多平台像iOS就禁止使用动态库,iOS8以后才允许,好像还有很多限制,比如要单独用framework啥的, 最新的不知道了. 遇到的问题是
    1. foundation库因为.so优先被加载的对象优先初始化就没了, 现在使用"__attribute__((init_priority(101)))"让foundation的对象优(比如内存管理)先初始化
    2. 所有插件都没有链接依赖, 所以.lib链接不进去, 使用"-Wl,--whole-archive"可以解决但是我不太喜欢, 所以现在用强制符号引用, 把lib链接进来. 强制的方法就像安卓ndk里native_app_glue.c 的 app_dummy(), 别的地方调用一下这个函数, 那么这个编译单元就被引用了, 会被链接到可执行目标,否则不进入.这个行为和解决方法, 对所有编译器都有效. 插件在构造的时候把自己放入全局插件列表, 加载插件的方式从加载dll/so,改为从全局列表里查找.
  8. 去掉了intel TBB,使用blade的thread库实现task分发. GLES遇到个问题, 就是随机分发, 导致shared context都不好用, 因为task可以在任意线程执行, 而shared conext在固定的线程下工作比较理想, 否则仍然有频繁的context切换,导致效率下降. 之前用tbb没有这个问题, 主要是因为tbb虽然也是随机分发任务,但几乎每次都是恰好把主线程给了渲染任务用, 偶尔在d3d9 debug layer会报多线程warning, 报warning的时候就是渲染task不在原来创建设备的线程, 但是因为blade可以保证任务的线程安全, 所以那个警告也可以忽略.
    解决办法是加了task affinity, 可以把task绑定到一个固定的线程, 或者主线程. 目前简单的绑定到主线程, 当然也可以绑定到一个固定的线程,只要设备(API)创建/初始化推迟到任务异步执行的线程里就可以了,不过从运行性能上分析, 几乎没什么差距, 所以就选用最简单的方式.
  9. 最后就是为了开源做的准备, 因为不太喜欢GPL, 想用MIT协议, 最后把iconv这个依赖去掉了, 幸好在加iconv的时候, 已经有宏隔离过了, 所以去的还算顺利. 查了FreeImage库, 除了GPL还有专门的商业license, FIPL, 所以还在用. runtime除了freimage, 已经没有大的依赖了, 还有一些小的依赖, 直接放到工程源文件里了, 具体引用了那些三方文件, 可以在git根目录下的LICENSE里查看.

后续计划:

mile stone 3: scene & effects:

  iOS和vulkan

  水,草,大气等

mile stone 4: tool pipeline & editor (not started)

  编辑器太简陋,还有设计硬伤,希望后面会更新

blade 已开源的更多相关文章

  1. 自写的开发框架,胜于官方的clientAPP的实战开发。(已开源)

    已开源,欢迎大家fork 小弟github地址为https://github.com/10045125/vanda 好久没写博客了,这段时间主要是要做的事情太多.如今接触android有段时间了.非常 ...

  2. c#与JAVA利用SOCKET实现异步通信的SanNiuSignal.DLL已开源

    大家好,前段时间C#的SanNiuSignal.DLL已开源;因部分用户特需要JAVA版的SanNiuSignal;现在只能把半成品先拿出来暂时给他们用了,以后再慢慢改进; JAVA版目前已实现跟C# ...

  3. 基于Web的CAD一张图协同在线制图更新轻量级解决方案[示例已开源]

    背景 之前相关的博文中介绍了如果在Web网页端展示CAD图形(唯杰地图云端图纸管理平台 https://vjmap.com/app/cloud),有不少朋友问,能不能实现一个协同的功能,实现不同部门不 ...

  4. BAT等大厂已开源的70个实用工具盘点(附下载地址)

    前面的一篇文章<微软.谷歌.亚马逊.Facebook等硅谷大厂91个开源软件盘点(附下载地址)>列举了国外8个互联网公司(包括微软.Google.亚马逊.IBM.Facebook.Twit ...

  5. [已开源/文章教程]独立开发 一个社交 APP 的源码/架构分享 (已上架)

    0x00 背景 真不是和被推荐了2天的博客园一位大神较真,从他那篇文章的索引式文章内容也学习到了很多东西,看评论区那么多对社交APP源码有兴趣的,正巧我上周把我的一个社交APP开源了,包括androi ...

  6. 仿各种APP将文章DOM转JSON并在APP中以列表显示(android、ios、php已开源)

    背景 一直以来都想实现类似新闻客户端.鲜城等文章型app的正文显示,即在web editor下编辑后存为json,在app中解析json并显示正文. 网上搜过,没找到轮子.都是给的思路,然后告知是公司 ...

  7. 手把手教你编写一个具有基本功能的shell(已开源)

    刚接触Linux时,对shell总有种神秘感:在对shell的工作原理有所了解之后,便尝试着动手写一个shell.下面是一个从最简单的情况开始,一步步完成一个模拟的shell(我命名之为wshell) ...

  8. 基于微信红包插件的原理实现android任何APP自动发送评论(已开源)

    背景 地址:https://github.com/huijimuhe/postman 核心就是android的AccessibilityService,回复功能api需要23以上版本才行. 其实很像在 ...

  9. elfiner-servlet 2.x已开源!

    通过近一周的努力,elfiner-servlet 2.x基本搞定! 已提交github,开源之!请各位享用~~ 对elfinder不熟悉的请访问:http://elfinder.org 一个很不错的文 ...

随机推荐

  1. 20145338 《网络对抗》逆向及Bof基础实验

    逆向及Bof基础实验 实践目标 ·本次实践的对象是一个名为pwn1的linux可执行文件. ·该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ·该程序同时包含 ...

  2. spring 定时任务执行2次

    eclipse 上定时任务执行没有问题,生产环境可以看到定时任务同时执行了2次,排除代码原因,网上找了些资料,最后发现是tomcat的原因, Host 节点中有一个appBase 属性指向了webap ...

  3. python笔记21-内置函数

    # print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真# print(any([0,0,0,0,0]))#判断可迭代的对象里面的值是否有一个为真# print(bin(10 ...

  4. MySQL免编译二进制包安装简记

    相比较于MySQL的源代码安装来说.免编译二进制包的速度实在是快了太多,而且性能损失也不是很大,同时具有一定的定制性.所以,如果没有特殊的 需求,尽量用MySQL免编译二进制包来安装MySQL. 1. ...

  5. Delegate & Event

    Long time without coding,貌似对programming都失去了曾有的一点点sense了,今日有空再细瞄一下.net的委托和事件. Delegate 首先,委托用于引用一类具有相 ...

  6. Note of Jieba

    Note of Jieba jieba库是python 一个重要的第三方中文分词函数库,但需要用户自行安装. 一.jieba 库简介 (1) jieba 库的分词原理是利用一个中文词库,将待分词的内容 ...

  7. JavaScript 之默认行为 DOM2级,事件委托机制

    1. 事件默认行为及阻止方式    1.1 浏览器的默认行为       JavaScript事件本身所具有的属性,例如a标签的跳转,Submit按钮的提交,右键菜单,文本框的输入等.    1.2 ...

  8. [Java] [Singleton] [DCL][happens-before]

    Singleton 只能有一个实例:必须自己创建自己的实例:必须给其他所有对象提供这一实例 实现方法 饿汉式singleton 预先加载法 class Single { private Single( ...

  9. npm -g -D -s的区别

    npm install module-name 全局安装 npm install module-name -D 即 npm install module-name -save-dev  保存到devD ...

  10. better-scroll

    better-scroll会将默认事件阻止掉,如果自己写的部分需要有点击事件,需要在参数里加上click:true. 同时,在PC上或某些手机端,由于未成功将touchend事件move掉,点击事件会 ...