blade 已开源
https://github.com/crazii
开源的主要原因是一个人写不动了, 而且已经很久没更新代码了. 希望有人能够感兴趣, 提供贡献.
距离上次更新日志已经很久了, 中间大概加了以下feature: (mile stone 3: scene & effects)
- 放弃 MFC插件, 使用 Qt 插件 (DPI适应不用自己写了, 而且跨平台, 理论上编辑器也可以上Mac/Linux)
- 添加了CSM (shadow map)
- 加了PostFX框架, 加入了HDR, HBAO, TAA(仅静态).
- Android长时间未维护, 开源前把bug修了. 备注一些OpenglES上CSM遇到的bug:
- glViewport 不影响glClear的区域, 要用glScissor 还有depth/color mask会影响glClear
- 2. textureProj传入的z是和zbuffer比较的,所以应该在[0,1]范围内, 这和d3d不太兼容, 多一步NDC到zbuffer[0,1]的映射.
- 水, 草, 大气 等还没有时间实现
- 去除vsandroid, 去除vs2015之前的支持, 目前只支持vs2015和vs2017, 支持直接编译win32和android.
- Android改为static build, 只留一个.so, 安卓不是必须的, 以前是一堆so, 这次算是提前准备吧. 因为很多平台像iOS就禁止使用动态库,iOS8以后才允许,好像还有很多限制,比如要单独用framework啥的, 最新的不知道了. 遇到的问题是
- foundation库因为.so优先被加载的对象优先初始化就没了, 现在使用"__attribute__((init_priority(101)))"让foundation的对象优(比如内存管理)先初始化
- 所有插件都没有链接依赖, 所以.lib链接不进去, 使用"-Wl,--whole-archive"可以解决但是我不太喜欢, 所以现在用强制符号引用, 把lib链接进来. 强制的方法就像安卓ndk里native_app_glue.c 的 app_dummy(), 别的地方调用一下这个函数, 那么这个编译单元就被引用了, 会被链接到可执行目标,否则不进入.这个行为和解决方法, 对所有编译器都有效. 插件在构造的时候把自己放入全局插件列表, 加载插件的方式从加载dll/so,改为从全局列表里查找.
- 去掉了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)创建/初始化推迟到任务异步执行的线程里就可以了,不过从运行性能上分析, 几乎没什么差距, 所以就选用最简单的方式. - 最后就是为了开源做的准备, 因为不太喜欢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 已开源的更多相关文章
- 自写的开发框架,胜于官方的clientAPP的实战开发。(已开源)
已开源,欢迎大家fork 小弟github地址为https://github.com/10045125/vanda 好久没写博客了,这段时间主要是要做的事情太多.如今接触android有段时间了.非常 ...
- c#与JAVA利用SOCKET实现异步通信的SanNiuSignal.DLL已开源
大家好,前段时间C#的SanNiuSignal.DLL已开源;因部分用户特需要JAVA版的SanNiuSignal;现在只能把半成品先拿出来暂时给他们用了,以后再慢慢改进; JAVA版目前已实现跟C# ...
- 基于Web的CAD一张图协同在线制图更新轻量级解决方案[示例已开源]
背景 之前相关的博文中介绍了如果在Web网页端展示CAD图形(唯杰地图云端图纸管理平台 https://vjmap.com/app/cloud),有不少朋友问,能不能实现一个协同的功能,实现不同部门不 ...
- BAT等大厂已开源的70个实用工具盘点(附下载地址)
前面的一篇文章<微软.谷歌.亚马逊.Facebook等硅谷大厂91个开源软件盘点(附下载地址)>列举了国外8个互联网公司(包括微软.Google.亚马逊.IBM.Facebook.Twit ...
- [已开源/文章教程]独立开发 一个社交 APP 的源码/架构分享 (已上架)
0x00 背景 真不是和被推荐了2天的博客园一位大神较真,从他那篇文章的索引式文章内容也学习到了很多东西,看评论区那么多对社交APP源码有兴趣的,正巧我上周把我的一个社交APP开源了,包括androi ...
- 仿各种APP将文章DOM转JSON并在APP中以列表显示(android、ios、php已开源)
背景 一直以来都想实现类似新闻客户端.鲜城等文章型app的正文显示,即在web editor下编辑后存为json,在app中解析json并显示正文. 网上搜过,没找到轮子.都是给的思路,然后告知是公司 ...
- 手把手教你编写一个具有基本功能的shell(已开源)
刚接触Linux时,对shell总有种神秘感:在对shell的工作原理有所了解之后,便尝试着动手写一个shell.下面是一个从最简单的情况开始,一步步完成一个模拟的shell(我命名之为wshell) ...
- 基于微信红包插件的原理实现android任何APP自动发送评论(已开源)
背景 地址:https://github.com/huijimuhe/postman 核心就是android的AccessibilityService,回复功能api需要23以上版本才行. 其实很像在 ...
- elfiner-servlet 2.x已开源!
通过近一周的努力,elfiner-servlet 2.x基本搞定! 已提交github,开源之!请各位享用~~ 对elfinder不熟悉的请访问:http://elfinder.org 一个很不错的文 ...
随机推荐
- xcode: 解决 __nw_connection_get_connected_socket_block_invoke 1 Connection has no connected handler
Run -> Arguments -> Environment Variables -> Add -> Name: "OS_ACTIVITY_MODE", ...
- 使用junit和eclemma进行简单的代码测试
1.Junit和Hamcrest的安装 可以在https://mvnrepository.com/上面下载所需要的Junit和Hamcrest的jar包,然后在项目中新建一个lib文件夹,将下载好的j ...
- 关于Python课程的思考和意见
老师您好,我是信息管理与信息系统专业的一名学生,由于专业原因,我在大一下学期第一次接触Python,并因为它简洁的语言和强大的函数库所吸引,刚好在选课时得知学校有开python选修课,就慕名而来. 首 ...
- 类 Arrays StringBuilder 跟 StringBuffer 的异同 SimpleDateFormat
类 String 同:起连接字符串类型作用 异: StringBuffer //线程安全 效率慢 StringBuilder //线程不安全 效率快 类 Arrays copyOf ( ...
- Thread线程join方法自我理解
Thread线程join方法自我理解 thread.join():等待thread线程运行终止,指的是main-thread(main线程)必须等待thread线程运行结束,才能继续thread.jo ...
- 为什么Python是最适合初创公司的编程语言?
为什么Python是最适合初创公司的编程语言? 选自Medium 作者:Gleb Pushkov 京东云开发者社区编译 对于初创公司而言,要在众多编程语言中为公司选择一个正确.合适的语言绝非易事. 如 ...
- linux 清理缓存buff/cache
清理缓存 echo 1 > /proc/sys/vm/drop_cachesecho 2 > /proc/sys/vm/drop_cachesecho 3 > /proc/sys/v ...
- c++给数组整体赋初值
1.memset memset是计算机中C/C++语言初始化函数.作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作. 头文件: #include<cstri ...
- Maven中添加镜像
Maven库在天朝的下载速度实在是感人,所以添加镜像之后速度会提升很多. 在maven的settings.xml 文件里配置mirrors的子节点,添加如下mirror <mirror> ...
- 简单搭个webapp开发框架
集成开发工具idea 服务器容器Tomcat 第三方依赖管理maven 暂时不集成 (spring+springmvc+mybatis(数据持久层存取)+dubbo+zookeeper(集群调度)) ...