全新流式数据访问模块

25 3 月, 2012 by admin 无评论 »

最近Java用的有点多,又开始了解了一下C#和WinRT,充分了解了一下他们在Stream上的设计。

外加上最近要将引擎移植到Linux/UNIX上,还需要支持PowerPC、ARM、mips等非x86处理器,各种需求开始大量暴露出来。比如大小头支持、不同编码及长度的wchar_t以及字符串支持、跨语言支持等等。

所以此次终于举起勇气开始重构和编写全新的stream式设计,已知的各种问题将在此次一举全部消灭,并带来全新的特性。更加的严格、更加的易用,更加的广泛。更加的易于学习。

  • 在绝大多数情况下,输入与输出将使用分开的流进行访问。以明确有些流式访问无法同时提供输入输出的问题。
  • 提供CanRead,CanWrite,CanSeek,CanRestart,CanSize等属性,以方便简测有些流式访问无法提供此类功能的问题。
  • 原始数据访问与格式数据访问分离,即类似Java的InputStream/DataInputStream设计。为支持不同数据格式处理提供功能。
  • 使用DataInputStream/DataOutputStream数据时,必须强制指定大小头,以保证在任何编码的处理器上,均可以正常访问数据。
  • 删去原本的ReadString/WriteString,改提供新的ReadUTF16LEChars/ReadUTF16BEChars、ReadUTF8String、ReadUTF16LEString/ReadUTF16BEString等函数。全面自适应任意wchar_t类型(UTF-16LE、UTF-16BE、UTF-32LE、UTF-32BE)。
  • 提供JavaInputStream/JavaOutputStream,基本对应java.io.DataInputStream/java.io.DataOutputStream,方便与Java程序交互。
  • 提供DecompressInputStream/CompressOutputStream、CryptInputStream/CryptOutputStream、MD5CheckInputStream/MD5CheckOutputStream、MergeOutputStream/SplitInputStream等辅助类。可使加密、压缩、校验、合并等各种功能无缝对接,随意组合。访问压缩加密数据同访问未加密压缩数据完全一致。

1024线程同时运作

11 3 月, 2012 by admin 无评论 »

这个示例存在很多年了,但这是第一次放视频出来,感谢现在的互联网啊!

下面视频中的每一个球的运动都由一个独立的线程控制,在一台Core 2 Quad 9300处理器上运行,使用Windows 8 CP操作系统,任务管理器显示cpu占用0%。

InputStream/DataInputStream

29 2 月, 2012 by admin 无评论 »

Java.io的InputStream/DataInputStream系列是个非常优秀的设计,以此引发的各种连锁设计大大简化了开发人员所需学习API的内容。新版的《古月》将参考这一设计,重构Stream以及各种IO接口。

《古月》R49完成,待所有示例测试完成即公布

16 1 月, 2012 by admin 无评论 »

《古月游戏开发库》的第R49版已经完成,现正待所有示例程序全部重新编译测试完成后即可发布。

此次版本更新除修正部分BUG外,重要增强跨平台性、多线程、网络服务器部分,并首次提供了Win64平台版本。同时也首次不再提供C++Builder版本。

 

同时,后续版本开发计划公告:

R50:修正未来所有得知BUG。

NG:以R49/R50版本为基础,尽可能删去所有陈旧设计,并做出重大重构。

  1. 引入GLFW为操作系统图形部分和设备输入部分的接口API。
  2. 引入CML做为数学库
  3. 删除陈旧的OpenGL 兼容模式绘制机制,使用新的纯VBO+VAO机制,使用OpenGL Core前向兼容模式

矢量追踪示例更新

7 1 月, 2012 by admin 无评论 »

在新版本中,矢量追踪从独立的杂项中移除,做为影响器的一个新组件出现,并严格按时间执行,不再受帧数率影响。
新的示例增加了直线显示要追踪的目标,更加形像的展示了矢量追踪的效果优势。

TheoraMovie解码器新版本提供

29 12 月, 2011 by admin 无评论 »

这是一款基于Theora解码器的影片解码SDK,它集成了自动丢帧丢包、YUV转换等各种功能,并在Theora官方MMX优化的基础上再次针对其它函数进行了汇编级优化。大幅提升了效能表现以及减化了开发者的开发过程。

此次更新将各核心库升级到最新版本:

LibTheora 1.1.1
LibOGG 1.3.0
LibVorbis 1.3.2

下载页面

《古月》for MinGW C/C++版将开始提供

10 12 月, 2011 by admin 无评论 »

《古月》针对Linux/BSD/Solaris平台的Server专用版真的是许多年没有更新了,早已不能编译的代码再次被启动更新。

今天,终于完成了最重要的多线程相关类的跨平台实现。

然而下一步并不是提供for Linux/BSD/Solaris版本,而是试做MinGW C/C++ for Windows版本,以减少代码在GNU编译器上的警告和错误。

之后再移植到Cygwin平台,进一步减少Linux平台下可能会出现的问题,最后就是正式的Linux/BSD/Solaris版本开发。

爱上JAVA

29 10 月, 2011 by admin 无评论 »

因为一个项目暂时没人做,硬着头皮去写了几行JAVA。结果出奇的顺利,一发不可收拾。一是IDE比较出色,二是JAVA的要求较严,很多东西由JAVA本身的类库代劳而自己完全不用关心。

强大的J2EE用来做做SERVER的接口似乎不错,免去了我研究跨平台之苦。而applet也可以顺利在网页上执行。

 

不过没有函数指针还是让人挺痛苦的,办很多事很不方便。

IrrLicht开始支持镶嵌(仅OpenGL模式)了

21 10 月, 2011 by admin 无评论 »

一段话的SSAO,在IrrLicht论坛上看到的

30 9 月, 2011 by admin 无评论 »

"uniform sampler2D tex0;"\

"uniform sampler2D tex2;"\

"uniform vec2 screenSz;"\
"uniform float camFar;"\
"float rand(vec2 co){"\
"        return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * vec2(43758.5453,43458.5734));"\
"}\n"\
"#define smplsz 7.05\n"\
"#define jitter 8.95\n"\
"#define range 10.0\n"\
"#define gi_scale 6.85\n"\
"#define ao_scale 1.55\n"\
"#define gi_mul_ao 0.45\n"\
"void main() {"\
"   vec2 UV = gl_TexCoord[0].xy;"\
"   vec2 sample3 = texture2D(tex2,UV).xy;"\
"   if (sample3.x==1.0)"\
"       discard;"\
"   float mult = camFar/range;"\
"   vec4 col = texture2D(tex0,UV);"\
"   col.w = col.w*2.0-1.0;"\
"   vec3 n = vec3(col.w,sample3.y,sqrt(max((1.0-sample3.y*sample3.y-col.w*col.w),0.0)));"\
"   vec3 p = (vec3(UV*2.0-1.0,1.0)*sample3.x*mult);"\
"   vec2 fres = UV*screenSz*vec2(5.0/128.0);"\
"   vec2 jitterSz = jitter/screenSz;"\
"   float ao = 0.0;"\
"   vec3 gi = vec3(0.0,0.0,0.0);"\
"   vec2 inc = vec2(smplsz)/screenSz;"\
"   vec2 UVoff;"\
"   float Adiv = 4.0/(screenSz.x*screenSz.y);"\
"   for(float i=1.0; i<4.0; ++i) {"\
"       float samples = i*3.0;"\
"       for(float j=0.0; j<samples; ++j) {"\
"           float angle = j*6.283185308/samples;"\
"           UVoff = clamp(UV+vec2(sin(angle),cos(angle))*i*inc+rand(fres+UVoff)*jitterSz,0.000386,0.999614);"\
"           vec2 sample4 = texture2D(tex2, UVoff).rg;"\
"           float sampleDepth = mult*sample4.r;"\
"           vec3 ddiff = vec3(UVoff*2.0*sampleDepth-vec2(sampleDepth),sampleDepth)-p;"\
"           float rd = dot(ddiff,ddiff)*3.141592654;"\
"           ddiff = normalize(ddiff);"\
"           vec4 colSmp = texture2D(tex0,UVoff);"\
"           colSmp.w = colSmp.w*2.0-1.0;"\
"           vec3 nmlE = vec3(colSmp.w,sample4.y,sqrt(max((1.0-sample4.y*sample4.y-colSmp.w*colSmp.w),0.0)));"\
"           float A = sampleDepth*sampleDepth*Adiv;"\
"           float cosE = max(dot(nmlE,-ddiff),0.0);"\
"           float cosR = dot( n,ddiff );"\
"           ao += cosE*max(cosR*4.0,0.0)/sqrt(A/rd + 1.0);"\
"           gi += colSmp.rgb*max(cosR,0.0)*cosE*(A/rd+1.0);"\
"       }"\
"   }"\
"   ao *= ao_scale/30.0;"\
"   gi *= gi_scale/30.0;"\
"   gl_FragColor = vec4((col.rgb+gi*gi_mul_ao)*vec3(max(-pow(ao,0.936),-1.0))+col.rgb+gi,1.0);"\
"}"

鄂ICP备09027626号