[业余土制] 简易网络库 easenet
1. 跨平台网络库
2. 异步事件:kevent, iocp, epoll, poll, select封装
3. 内存管理:SlabPlus
4. 可靠协议:类tcp纯协议实现,包括重传机制,窗口管理,流量控制,拥塞处理。
5. 多种工具:缓存池,环状缓存,高性能hashmap等。
代码贴上:
Read more…
1. 跨平台网络库
2. 异步事件:kevent, iocp, epoll, poll, select封装
3. 内存管理:SlabPlus
4. 可靠协议:类tcp纯协议实现,包括重传机制,窗口管理,流量控制,拥塞处理。
5. 多种工具:缓存池,环状缓存,高性能hashmap等。
代码贴上:
Read more…
图像:64种不同的像素格式,色彩空间变换,多种图形图像变换。
质量:支持3种级别抗锯齿效果,高质量几何图形绘制。
实现:轻量级纯软件实现,100% C代码(仅700KB代码)。
优化:SSE2/MMX优化
地址:https://github.com/skywind3000/pixellib
1. 图像变换:
支持仿射变换和透视变换,提供大量图像变换操作接口。
实时动态在内存中编译汇编代码,并返回函数调用指针,可用于JIT系统的后端:
项目地址:http://code.google.com/p/asmpure/
例子:
const char *AlphaBlendAsm = "PROC C1:DWORD, C2:DWORD, A:DWORD\n" " movd mm0, A\n" " punpcklwd mm0, mm0\n" " punpckldq mm0, mm0\n" " pcmpeqb mm7, mm7\n" " psubw mm7, mm0\n" " \n" " punpcklbw mm1, C1\n" " psrlw mm1, 8\n" " punpcklbw mm2, C2\n" " psrlw mm2, 8\n" " \n" " pmullw mm1, mm7\n" " pmullw mm2, mm0\n" " paddw mm1, mm2\n" " \n" " psrlw mm1, 8\n" " packuswb mm1, mm1\n" " movd eax, mm1\n" " emms\n" " ret\n" "ENDP\n"; void testAlphaBlend(void) { CAssembler *casm; int c; int (*AlphaBlendPtr)(int, int, int); // create assembler casm = casm_create(); // append assembly source casm_source(casm, AlphaBlendAsm); AlphaBlendPtr = (int (*)(int, int, int))casm_callable(casm, NULL); if (AlphaBlendPtr == NULL) { printf("error: %s\n", casm->error); casm_release(casm); return; } printf("==================== Alpha Blend ====================\n"); casm_dumpinst(casm, stdout); printf("\nExecute code (y/n)?\n\n"); do { c = getch(); } while(c != 'y' && c != 'n'); if(c == 'y') { int x = AlphaBlendPtr(0x00FF00FF, 0xFF00FF00, 128); printf("output: %.8X\n\n", x); } free(AlphaBlendPtr); casm_release(casm); }
output: 7f7f7f7f
This is an enhanced SLAB algorithm implementation in application layer, which provides O(1) memory allocating and efficient memory recycling.
Since SUNOS has presented slab allocation theroy, many OSs have implemented slab in their kernel. But it requires kernel-layer interfaces such as page supply etc. So this library improves slab’s algorithm and brings the interfaces of slab into application layer.
项目位置:http://code.google.com/p/memslab/
原理叙述:
2001-2002期间开发的虚拟机/编译器开源项目代码和资料
所有资料可以从下面地址下载:
下载可执行 源程序下载 设计说明书
关于虚拟机及其编译器的说明
记得3DS/MAX里面实现了一个类似BASIC的脚本,Animator里面实现了一个类C的脚本语言,Autodesk公司的软件对于脚本支持的很出色,好的脚本引擎在乎平台无关性、高效性和扩充性,一个脚本引擎的需要对一个好程序来说非常迫切,于是半年前我写了一款虚拟机,最近又实现了一个类Basic的脚本编译器,特性说明:
通过半年的修改我自己觉得虚拟机够高效开放,就是vmbasic编译器写的没有多高的水准:完全没有对生成代码做优化,弄出许多繁琐的中间代码,不过还是明显快于及时解释语言,通过测试速度大概是DOS自带的QBASIC程序的三倍左右(可以通过目录下的几个算法程序来实验)。
为了检验其效率和扩充性,我将虚拟机程序扩充了一些作图功能写成了 Windows版本的,然后用vmbasic编写了一个空战小游戏,虽然由于一开始我太相信GDI而没有选择DDraw,且编译器要生成1/2左右的重复性代码,但是仍可以从游戏中看出效率来(可以用vmbide.exe打开fire.bas运行),关于编译程序VmBasic的更详细说明见basic.htm
程序说明:压缩档包括虚拟机运行程序(vmbeta.exe)VmBasic调试开发平台(vmbide.exe)四个算法例子(alex1-4.bas) 一个射击游戏例子(fire.bas)及其图片,说明帮助文档若干….
VmBasic开发/调试环境的介绍及说明:
右边的图是完整的开发环境左边是语句帮助,中间是代码编写区,下面是编译的错误和过程记录,系统热键说明:
1.F8编译成VMS文件
2.F9编译并运行程序
3.F1对VmBasic的帮助
4.Shift+F1帮助IDE
另外点击运行图表左边的图表可以查看编译出来的虚拟机汇编代码。点击工具目录,可以做一系列设置:虚拟机程序设置,预连接库设置,开发环境设置等,都是简单的东西
用VmBasic编写的射击小游戏:必须Windows版的虚拟机程序运行(扩充了GDI图形功能)
显示查看虚拟机汇编
关于其他
半年前在论坛上面看见过一些师兄们关于编译的争论,忽然有所感悟,那时刚好写了虚拟机,于是就决定为它写款语言,本来考虑写类C或者类Pascal的,但是想着Basic用起来简单,而且分析起来似乎也简单,后来我才发现虽然没有 C的编译难写但由于Basic经历了长时间的发展,语法变化很大,总的来说没有同意的规范,模块表示也不明确,就连IF语句都有好多种版本,所以一个支持函数/过程的Basic编译器我觉得比Pascal难写的多。目录DOS下有DOS环境的编译器和虚拟机,可以用来编译运行非扩展的vmbasic程序:alex1-4.bas,可以在IDE的工具->设置里面设定虚拟机的运行程序。
这是个引擎的演示版本,毕竟好的东西都不是一个人整出来的,我也会在学校不断的学习,非常欢迎来信讨论相关技术,和游戏/图形程式设计,如果你觉得这套引擎对你有价值,可以写信给我,如果你对相关的东西很感兴趣,也可以写信给我,联系方法:
成都建设路电子科技大学20013080 林伟
邮编:610000
电话:028-83200790
信箱:skywind3000@163.net
无名鸟游戏工作组制作 http://www.skywind.me
Recent Comments