Archive for the ‘未分类’ category

渲染引擎将全面开始向OpenGL Core过渡

22 9 月, 2013

其实OpenGL Core版渲染引擎早在3年前就出现了雏形,并在2011年初上马了第一个项目。为什么要等到现在才公布呢?其中一个重要的原因就是OpenGL Core注定了在低端显卡上无法运行。现在这个条件在慢慢的消失了,于是时机到了。

关于 undefined reference to `vtable for 。。。。。。。。’的错误解决方法

19 3 月, 2013

最近碰上这个问题,无论GNU C/C++ 4.7.2还是LLVM Clang 3.2都会报,在网上查了许多资料,基本内容一样,但也基本都没有真正命中这个错误的起因。

这句英文的本意是无法产生虚拟函数映射表,那么原因肯定就是有虚拟的函数不存在。但为什么会不存在?那当然是没有写了。

所以,解决的办法就是检测你报错的类中,是否真正的实现了所有在本类中定义的派生函数。如果仅在.h中定义,而没有在.cpp中实现,就会报这个错误。

举个例子,以及代码中,B类就会报如上错误。

class Base
{
virtual void func();
};

class A:public Base
{
//没有定义,使用基类的
};

class B:public Base
{
void func(); //定义了,但没有实现
};

csv2table/CDBTableViewer for QT/Linux(openSUSE 12.2 X64)

5 12 月, 2012

虽然引擎支持了Linux/BSD,虽然仅是做SERVER。但还是会需要一些旧版引擎上才有的工具,比如CDB表格模块。之前一直是使用WINE在LINUX下转换和查看表格,但糟糕的是一旦出现问题无法修复,只能重启进WIN平台修正,非常之麻烦。昨日花了点时间先将CSV转CDB表格工具移植了过来,整个过程还算顺利,绝大部分代码都无需修改,剩下的小部分一般也就是改改名字和用法。

而后来想了想,开始了程序生涯中的第一个QT/LinuxGUI程序,这个比刚才还较顺利,没什么好说的。

另:CSV2Table转换器新增了对.ods/.fods/.xlsx文件格式的支持

《古月》发布Linux/BSD/Solaris早期开发测试版

11 9 月, 2012

Linux版:使用openSUSE 12.2系统、GCC 4.7.1编译 ,提供x86_64与i686版

BSD版:使用FreeBSD 9、LLVM Clang 3.0编译,仅提供amd64版

Solaris版:使用Solaris 11,GCC 4.5编译,仅提供i386版

注:此版本属早期开发测试版,仅供开发者试用评估,如在正式项目上使用造成任何问题,概不负责。

下载请点击这里 (使用金山快盘共享,在此特别感谢)

今天开始加入UNIX标签

14 7 月, 2012

细心的朋友会发现,我在网站最上方的标签中,新加了UNIX标签。

缘于我最近一段时间全面使用Linux系统办公,并且我还在Linux系统上安装了虚拟机,在虚拟机上安装了FreeBSD 9与Solaris 11。新一代的《古月》已经是完全在Linux下开发了,现可以正常编译并执行与Linux/FreeBSD环境下。可怜的Win环境已经完全不能编译了,尚在修正中。

也有可能程序员天生就喜欢命令行,看着命令行如代码一般。一开始还在win/linux之间反复切。后来终于可以痛下杀手将WIN分区完全格掉了。其实Linux桌面也还是挺好用的,相比Windows少的主要是娱乐方面。另外QQ/中国的网银也是一大麻烦。

封包的填充机制

8 7 月, 2012

1.充分自适应化

sock<<ID<<NAME<<SEX<<HP<<MP<<EXP;

优点:自动化强、简单、写着方便
缺点:有些时候依然无法自动化,而且会让程序员忽视数据的类型。客户端如与服务器端不一样,后果很严重。

2.严格指定格式法

sock.writeUint64(id);
sock.writeUTF8(NAME);
sock.writeBool(SEX);
sock.writeUint32(HP);
sock.writeUint32(MP);
sock.writeUint32(EXP);

优点:要求开发者严格指定数据类型,不容易出错
缺点:写着太累

sendfile函数在Linux/FreeBSD下的使用区别

3 7 月, 2012

#if HGL_OS == HGL_OS_Linux
#include<sys/sendfile.h>

inline int sendfile(int tfd,int sfd,size_t size)
{
return sendfile(tfd,sfd,NULL,size);
}
#endif//HGL_OS == HGL_OS_Linux

#if HGL_OS == HGL_OS_FreeBSD
#include<sys/uio.h>

inline int sendfile(int tfd,int sfd,size_t size)
{
return sendfile(tfd,sfd,0,size,NULL,NULL,0);
}
#endif//HGL_OS == HGL_OS_FreeBSD

Linux版本开发顺利,大部分基础函数调试通过

15 6 月, 2012

以下为使用LLVM Clang编译的某server示例程序启动截图

《古月》发布LR-49.RC2版

9 5 月, 2012

 

 

重要特性:

  • 跨CPU化,全线支持x86-64bit
  • 增加Intel C/C++系列支持

 

基础:

  1. 增加模板函数hgl_abs,内联函数hgl_rad2ang/hgl_ang2rad
  2. 将淡入淡出影响器Fade改为模型板
  3. RectScope模板增加与Vertex2模板数据的+/-/+=/-=计算处理
  4. 增加第三方库:APR(Apache Portable Runtime)
  5. 增加内存池类MemoryPool,使用apache内存池底层
  6. 增加WaitTime函数
  7. Microsoft编译器增加Microsoft C/C++ 17/Visual C++ 11支持
  8. 改进模板List的重设数据量以及整列表复制性能
  9. 删除memex.h以及其下所有函数,将所有调用改为标准mem函数调用。
  10. 增加CML数学库为数学处理基础库
  11. AnsiToUnicode/UnicodeToAnsi改为AnsiToWide/WideToAnsi
  12. WideString类增加FillChar函数,用于填充字符到字符串
  13. 计时函数改为APR跨平台版本
  14. 增加Visual C++ 2010 Service Pack 1提示
  15. 增强Affector/AffectorTrackTimer安全性
  16. SAFE_CLEAR_OBJECT_ARRAY等宏改进,更安全
  17. 改进任务管理器TaskManager
  18. 修复按键映射类
  19. 修正Vertex2::Length()计算没有sqrt问题
  20. 编译/库连接宏增加对VC/CB未知版本支持
  21. 删除废弃的Coll2D
  22. 删除没有实现的FlowTransition
  23. 删除非原始光盘检测函数
  24. 实现影响器版本矢量追踪
  25. 系统路径检测增加公共应用程序路径和本地应用程序路径
  26. 增加非Win32平台下插件再增加平台名称后缀标识
  27. 提供部分Win64平台插件
  28. 全新的智能指针系列,仿c++11标准设计
  29. 修订WideString/StringList,使之处理数据更为严谨.
  30. FileInfo::directory改名为is_directory
  31. 统一ansi<->wide转换处理代码为一处、增强wide_to_utf8/utf8_to_wide
  32. 增加utf16/32至wchar_t的转换功能
  33. Stream及派生类增加CanSeek,CanRead,CanWrite属性
  34. 完善StringList,增加对utf32以及对CPU大小头的支持
  35. 字符串函数返回值由int改为size_t,保持和标准crt库一样。
  36. 清除旧有MD5算法实现,增加新的md5类,归属UnilityTools,头文件为ut/md5.h,源代码为UtilityTools/Hash/md5.cpp,md5util.cpp,新的使用apr实现。
  37. 操作系统识别增加BeOS/Haiku,QNX
  38. 操作系统识别将BSD分裂为FreeBSD,NetBSD,OpenBSD
  39. CPU识别将MIPS分裂为MIPS,MIPSel
  40. 编译器识别增加PGI,TI,LLVM Clang
  41. 字符串函数全部提为模板实现,以方便未来支持任何类型的字符串。
  42. 修正gnu c/c++与linux操作系统头文件配置不正确问题
  43. 所有Stream长度单位改为int64
  44. 增加Endian转换处理
  45. 更改日志输出目录,以及处理机制。(Windows UAC兼容性提升)
  46. 增加对库的大头小头检测,以避免宏错误识别

 

多线程、多进程:

  1. 删除原本的模拟RWLock,改为Win2008 R2/Win 7专有SRWLock,其它情况使用APR实现。(注:原本模拟RWLock即采用APR代码实现)
  2. ThreadMutex删除不曾被任何工程使用的WaitLock函数
  3. ThreadMutex增加APR跨平台实现版本
  4. 删除Thread::Sleep函数,请改用WaitTime函数,以免造成与Windows api冲突
  5. 删除CircleStream,增加RingBuffer,功能基本替代,但更强大
  6. 添加多进程共享内存模块,使用APR实现
  7. 增加进程排斥模块
  8. 增加CondVar,包含Win2008/Vista专用版和APR跨平台版
  9. Thread::Execute改为循环执行,以返回值区分是否继续执行
  10. Atomic增加volatile修饰,并改用APR实现
  11. Thread类删除Pause/Resume函数
  12. 增加Thread类的posix thread实现
  13. 增加Semaphore类的posix thread实现

 

脚本部分:

  1. 删除AngelScript支持
  2. DevilScript/DevilVM增加x86-64位函数呼叫支持

 

网络部分:

  1. 增加network名字空间,将所有网络模块移置network名字空间
  2. TCPServer发送数据从自有多线程阻塞模式发送改为IOCP多线程发送
  3. 修正TCPServer在WindowsXP操作系统下运行错误的问题
  4. 将网络处理代码中的各种错误和数值全部抽调并定义宏集中放置于Socket.H,以增加开发者查看源代码时的易读性
  5. TCPSocket将部分设置改为宏在Socket.H中标记
  6. TCPSocket默认提供的封包类型和封包长度数据类型改为可自定义
  7. 重构TCPServer,增设TCPAcceptManage,分离TCPServer本身与接入者管理。分离原有IOCP支持为IOCPAcceptManage,并增加多Select模式的MSAcceptManage。
  8. Socket增加SetNodelay函数
  9. TCP部分增加全新的封包自动分发机制,自动分发机制并不是直接简单的按表分发,而是减少了一次内存拷贝,比手动模式更有效率
  10. IOCPAcceptManage/MSAcceptManage改为池管理连接
  11. TCPSocket::UseSock改名为UseSocket
  12. 修正TCPMultiAccept模式下第一次通信会等待的问题
  13. 砍掉TCPClient::Disconnect等待线程自动退出设计
  14. 解决TCPClinet退出需要等待过久问题
  15. MTBAccept增加发送处理的安全锁处理
  16. 为各TCPAccept派生类增加CloseSocket重载,以处理各类需要特别处理的部分。
  17. 增加Multi Thread Block模式
  18. 增加MSAccept::RecvData/SendData的安全性

 

图形部分:

  1. 升级GLEW到1.7.0
  2. HTP增加自定义绘制方法
  3. 改进截图程序处理流程,提升代码易读性、美观性与执行效能
  4. 删去DrawArray中的double数据类型支持
  5. 优化hgpuiButton加载图层代码

 

音频、视频部分:

  1. 修正音源距离描述注释,并修改变量名称以更为清晰表达意思
  2. AudioPlayer增加淡入淡出处理
  3. 修正TheoraMovie无音频时无法播放问题
  4. 修正AudioPlayer自动音量调整时间记录不能为半秒的问题

《古月》新版重大变更说明

4 4 月, 2012

原本计划在一周年期发布新的R49版本的,现在看来要大幅延后了。最主要的原因是Server模块以及跨平台设计的影响。

1.商业级的合作伙伴们可能都清楚,在过去的一年里,《古月》的r49开发版的网络模块发生了巨大的变化,从追求极致的高性能,变成了追求易于高效开发。而这引发的不仅仅是网络模块的巨大变动,多线程,多进程模块也产生了很大的变动,幸运的是这部分的变动多在增加新特性和增加新平台支持,在使用上变化较小。

2.另一个方面同样是源自各位商业级的合作伙伴。那就是跨平台:不但要跨Linux/BSD等操作系统,还要跨CPU体系,最先被引入支持的是IBM/Motorola/SONY的PowerPC/Cell处理器。由于PowerPC与X86体系的数据编码大小头不一样。为此,我们彻底重写了Stream与String代码,并且绝大部分的String代码以模板方式存在。对开发者来讲,最大的麻烦就是以后在保存数据和读取数据时,就必须明确指定编码形式了。

3.同时,我们进一步扩大了模板的使用范围,首先是大量的str/string代码,由封闭的状态变成了模板函数。将不再有ansi/wide之分。
4.最后,由于我们将进一步加强在服务器领域的开发,所以安全性在这一版里将得到放大,大量的不安全函数如strcpy,strlen将得到删除和替换。以及ansi->unicode等不明确转换也变成了必须进行明确指定转换体系等等。

鄂ICP备09027626号