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 一个很不错的文 ...
随机推荐
- Html骨架、基本语法
万丈高楼平地起,勿贪快,脚踏实地,才能仰望星空 一.HTML骨架 标准骨架 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio ...
- 浅谈利用同步机制解决Java中的线程安全问题
我们知道大多数程序都不会是单线程程序,单线程程序的功能非常有限,我们假设一下所有的程序都是单线程程序,那么会带来怎样的结果呢?假如淘宝是单线程程序,一直都只能一个一个用户去访问,你要在网上买东西还得等 ...
- 第一周嵌入式程序设计(linux环境下)的学习总结
2014025641 <嵌入式程序设计>第1周学习总结 本周学习内容 首先我们先复习下之前学习过的内容,什么是linux? Linux 就是一个操作系统,就像你多少已经了解的 Window ...
- python基础 字典练习
练习1:info = [ {'wangming': { 'money':1111, 'car':['bmo','bsj'], 'info':{ 'phone':1511111, 'age':18} } ...
- adaboost 参数选择
先看下ababoost和决策树效果对比 import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection ...
- gprinter佳博打印机androidSDK
最近在用佳博的SDK做打印的功能,由于一直做的是.net,没有android的基础,这个功能我做了一个多月,包括前期调研佳博打印机的打印方式.佳博打印机有两种打印方式,一种是标签打印,要用到TscCo ...
- 微信浏览器软键盘弹出与页面resize的问题
使用微信打开网页,弹出软键盘时遇到的兼容问题 过去开发中遇到过很多这种情况,页面底部需要固定定位一个按钮,广告栏或者菜单栏,页面中有表单项需要填写,在打开手机虚拟键盘的时候,底部固定定位的元素会处在软 ...
- lsmod语法
lsmod——显示已载入系统的模块 lsmod 其实就是list modules的缩写,即 列出所有模块. 功能说明:显示已载入系统的模块. 语法:lsmod 说明:执行lsmod指令,会列出所有已载 ...
- 玩转BLE(1)_Eddystone beacon
1. 前言 你相信两条命令就可以把自己的破手机变成一个Beacon节点吗?不相信的话就接着往下看吧. 通过前几篇“蓝牙协议分析”相关的文章,特别是“蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍” ...
- 不使用Visual Studio开发ASP.NET MVC应用(下篇)
书接上回! 前文“纯手工”.彻底抛弃Visual Studio,制作了一个ASP.NET MVC应用,运行起来还不错,项目目录.源代码.web.config等所有东西都已经做到“最简”,除去了Visu ...