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. vs2017 无法提交到tfs的 git存储库

    tfs 是2018版本 使用git 工具是可以提交成功. 使用vs2017的 就会一直提示 授权失败 也可以使用新安装的git https://blog.csdn.net/Meteor_s/artic ...

  2. @Dependson注解与@ConditionalOnBean注解的区别

    @Dependson注解是在另外一个实例创建之后才创建当前实例,也就是,最终两个实例都会创建,只是顺序不一样 @ConditionalOnBean注解是只有当另外一个实例存在时,才创建,否则不创建,也 ...

  3. boostrap 日期插件(带中文显示)

    不知道大家用什么样的日期插件,我最近用了bootstrap插件,整理了下,分享给大家,第四部分是我找的插件源码,可以省去大家的找的时间,按1-3的步骤用就好了,有些样式上的小问题就自己调一调: (1) ...

  4. C/C++(static)

    出自:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777441.html 静态全局变量作用范围在一个文件内,程序开始时分配空间,结束 ...

  5. 微信机器人 返现机器人 pc版本 移动版本 java开发 小范省钱

    微信机器人 返现机器人 pc版本 移动版本 java开发 小范省钱 微信搜索微信号 fanli-x 或 扫描下方二维码,可查看效果. 非web版微信,pc/移动版微信 支持新号24小时 不封号! 有任 ...

  6. poj3162(树形dp+优先队列)

    Walking Race Time Limit: 10000MS   Memory Limit: 131072K Total Submissions: 5409   Accepted: 1371 Ca ...

  7. Shiro-Spring 授权操作

    Subject进行Shiro的授权操作,首先委托给Security Manager,在由Security Manager 委托给Authenticator,由Authenticator授权器进行真正的 ...

  8. 吴恩达机器学习笔记5-Octave基本操作

    1.逻辑运算 1==2 %false :注释用%,这句话意思是判断1是否等于2,false,输出0 1~=2 %true  1不等于2 为true,输出为1 1&&0 %and 1|| ...

  9. JavaScript中Ajax的用法

    XMLHttpRequest 对象的属性和方法: open(method,url,async) 规定请求的类型.URL 以及是否异步处理请求 send(string)   将请求发送到服务器. res ...

  10. .NET并行计算和并发:Task

    任务不是线程. 任务运行的时候需要使用线程,任务并没有取代线程.