Archive

Archive for April, 2016

超越 SDL/DirectDraw/GDI 性能的位图库

April 29th, 2016 2 comments

开源一个高性能位图库,之前对我的二维图形库 pixellib 进行了精简和重写,最终形成一个只包含两个文件(BasicBitmap.h, BasicBitmap.cpp)的图形基础库。

在今天 GPU 绘制横行天下的时候,任然有很多时候需要使用到纯 CPU实现的图形库,比如图像处理,视频预处理与合成,界面,以及GPU无法使用的情况(比如某个应用把gpu占满了,或者无法通过gpu做一些十分灵活的事情时),纹理处理,简单图片加载保存等。

支持 SSE2/AVX 优化,比 DirectDraw 快 40%(全系统内存绘制),比 SDL 快 10%,比GDI快 38%。如果你需要一个方便的高性能位图库,足够高性能的同时保证足够紧凑。

如果你有上述需求,那么你和我一样需要用到 BasicBitmap,只需要把 BasicBitmap.h/.cpp 两个文件拷贝到你的代码中即可。我正是为了这个目的编写了这两个文件。

特性介绍

  • 高度优化的 C++ 代码,可以在任意平台编译并运行
  • 多重像素格式,从8位到32位:A8R8G8B8, R8G8B8, A4R4G4B4, R5G6B5, A8, 等.
  • Blit (Bit Blt) ,包含透明和非透明的模式。
  • 像素格式快速转换
  • 使用不同的 Compositor 进行 Blending
  • 使用不同的过滤器进行缩放(nearest, linear, bilinear)
  • 高质量位图重采样(Bicubic/Box)
  • 支持从内存或者文件直接读取 BMP/TGA 文件
  • 支持从内存或者文件直接读取 PNG/JPEG 文件(Windows下)
  • 保存图片为 BMP/PPM 文件
  • 核心绘制函数可以被外部实现通过设置函数指针重载(比如 SSE2实现)
  • 比 DirectDraw 快 40% 的性能进行绘制(打开 AVX/SSE2支持)
  • 比 GDI 的 AlphaBlend 函数快34%的性能进行混色
  • Self-contained, 不依赖任何其他第三方库
  • 高度紧凑,只需要拷贝 BasicBitmap.h/.cpp 两个文件到你项目即可

项目地址

Blit 性能比较

Full window (800×600) blitting (both opacity and transparent), compare to GDI/SDL/DirectDraw:

32 Bits Blit Opacity Transparent
BasicBitmap C++ fps=2325 fps=1368
BasicBitmap AVX/SSE2 fps=2904 fps=2531
GDI fps=2333 fps=1167
SDL fps=2671 fps=1015
DirectDraw fps=2695 fps=2090

Note: use BltFast with DirectDrawSurface7 in System Memory to perform Opacity & Transparent blit. BitBlt and TransparentBlt(msimg32.dll) are used in the GDI testing case.

16 Bits Blit Opacity Transparent
BasicBitmap C++ fps=4494 fps=1253
BasicBitmap AVX/SSE2 fps=9852 fps=2909
DirectDraw BltFast fps=5889 fps=861

Blitting performance in SDL & GDI are slower than DirectDraw, just compare to ddraw as well.

8 Bits Blit Opacity Transparent
BasicBitmap C++ fps=11142 fps=1503
BasicBitmap AVX/SSE2 fps=18181 fps=5449
DirectDraw BltFast fps=14705 fps=4832

DirectDrawSurface in Video Memory takes the benefit of hardware acceleration which is definitely faster than BasicBitmap. If you really need hardware acceleration, use OpenGL/DX as well.

BasicBitmap is a software implementation which aims to achieve the best performance in all other software implementations: like GDI/GDI+, SDL/DirectDraw in System Memory, for examples.

So just compare to DirectDrawSurface in System Memory. Use it in the condition that you only need a lightweight software solution: GUI/Cross Platform/hardware unavailable/image processing/video compositing, etc.

混色性能比较

SRC OVER FPS
BasicBitmap C++ 594
BasicBitmap SSE2 1731
GDI (msimg32.dll) 1137

note: 800×600 full window src-over blending vs GDI’s AlphaBlend function (in msimg32.dll).

Categories: 图形编程 Tags: , ,

后端工程师招聘启示

April 18th, 2016 1 comment

创业一年多,走过不少弯路,公司最近终于开始有了点收入,说起来有点老泪纵横。虽然没有完全覆盖成本,但证明产品方向没有大问题,运营开展后,后端团队急需进一步扩大,方向是两个:

第一是游戏社交,陪玩竞技的APP,提供游戏用户专有的沟通工具。

第二是为云技术,为游戏或者其他应用开发商提供更好的即时通讯云技术,这点我在知乎里面阐述过:https://www.zhihu.com/question/32228281/answer/55844291

公司坐落在广州市科韵路,现在团队规模35人左右,后端主要技术是java/python/c,熟悉任意即可,有需要用别的语言学就是。

公司是有很强技术基因的公司,后端团队我会亲自带,创造和分享是我们一直以来秉持的理念。希望同更多有识之士共同进步和成长。

具体需求如下:

  1. 后端开发1-3年经验,基础扎实。
  2. 熟悉:Python / Java / C (任意一种语言)
  3. 互联网或者游戏开发背景不限。

如果有兴趣,请加我QQ:贰三五六柒五贰。

Categories: 随笔 Tags:

做主程序员是怎样的体验?

April 10th, 2016 3 comments

程序员觉得自己长期徘徊在业务逻辑上,希望成为一名主程序,不知道主程序需要会哪些东西。是不是每个主程都有自己的框架?是不是要熟悉各种技术的底层内核?

想成为技术负责人是好事,说明你起码是一个有事业心的人,如果真的想成为技术负责人就该卖力工作,多解决工作中实际问题,做到比别人业务更熟练,然后先成为骨干,再有合适的机会成为主程。

自己工作中出成绩,比你写什么框架都强。别搞反了,成天把时间费在和工作无关的事情上,耽误了本职,最终给别人留下一个:知道的挺多的,可惜工作不突出,做东西又慢的印象。

见过的凡是得到提升任命的主程们,无不是出色的解决了工作中各种实际问题,或者优化了性能,或者降低了整体开发成本,引入更多自动化机制,或者解决了效率问题。他们都是主动在工作中争取承当更大责任的人,不是成天钻研各种虚无缥缈的东西的人。

怎么争取承担更大责任呢?一句话,快,做东西要快,别人做两天你做一天,天下武功唯快不破。时不时告诉主程你已经做完了,接下来做什么?多问几次,然后主动跟他提,哪块还需要搞一下,你想把它搞一下,不然以后XXX。

承当了更多责任的时候,就可以象主程提建议说自己这边事情太多,能不能有1-2个实习生或者新人。然后从带好实习生和新人开始,多为组内培养人才,进而成为组内骨干。

Read more…

Categories: 大浪淘沙 Tags:

使用 Markdown 写 WordPress

April 3rd, 2016 1 comment

使用 Markdown 来再命令行写 WordPress 的感觉很不错,我整合了两个 Python 库,一个叫 blogpost, 另外一个叫做 markdown2,前者可以用来命令行发送 WordPress 文章,但是只支持 .html 或者 asciidoc 格式来写 WordPress,因此又引入了 python 的 markdown2,合成项目:

https://github.com/skywind3000/markpress

但是标准 Markdown转换出来的 html 再 wordpress中高亮不正确,因此费了点时间修改了一版 markdown2 为 markdown3 ,调整了相关的样式,可以很好的在 wordpress 中显示,同时使用了 metadata,再文章中 可以指定标题和类别,使用很简单,首先克隆项目:

 $ git clone https://github.com/skywind3000/markpress.git

然后创建你的工程目录 myblog(用来保存文章和相关中间数据,推荐提交到版本管理系统上来),目录为:

myblog +- wordpress.ini  # 站点配置文件,url,用户名,密码
       +- doc            # 存放 markdown 文章源文件的目录
       +- data           # 自动生成的 postid/html等,丢失会导致重新发文
       +- images         # 保存图片的目录,文章中图片都用 "../images/*" 引用

Read more…

Categories: 随笔 Tags:
Wordpress Social Share Plugin powered by Ultimatelysocial