其实OpenGL Core版渲染引擎早在3年前就出现了雏形,并在2011年初上马了第一个项目。为什么要等到现在才公布呢?其中一个重要的原因就是OpenGL Core注定了在低端显卡上无法运行。现在这个条件在慢慢的消失了,于是时机到了。
Archive for the ‘未分类’ category
渲染引擎将全面开始向OpenGL Core过渡
22 9 月, 2013关于 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(); //定义了,但没有实现
};
《古月》发布Linux/BSD/Solaris早期开发测试版
11 9 月, 2012Linux版:使用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 月, 20121.充分自适应化
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《古月》发布LR-49.RC2版
9 5 月, 2012- SDK for Windows (R49.RC2)
- SDK R49.RC2 for Visual C++ 11库文件
- 版本:LR-49.RC2
- 日期:2012年5月09日
- 容量:191MB
- 格式:.exe安装文件
- 注:RC版为评估版本,并未完成所有示例程序的测试。如有问题请立刻回报至hyzboy@gmail.com或www.hyzgame.com
重要特性:
- 跨CPU化,全线支持x86-64bit
- 增加Intel C/C++系列支持
基础:
- 增加模板函数hgl_abs,内联函数hgl_rad2ang/hgl_ang2rad
- 将淡入淡出影响器Fade改为模型板
- RectScope模板增加与Vertex2模板数据的+/-/+=/-=计算处理
- 增加第三方库:APR(Apache Portable Runtime)
- 增加内存池类MemoryPool,使用apache内存池底层
- 增加WaitTime函数
- Microsoft编译器增加Microsoft C/C++ 17/Visual C++ 11支持
- 改进模板List的重设数据量以及整列表复制性能
- 删除memex.h以及其下所有函数,将所有调用改为标准mem函数调用。
- 增加CML数学库为数学处理基础库
- AnsiToUnicode/UnicodeToAnsi改为AnsiToWide/WideToAnsi
- WideString类增加FillChar函数,用于填充字符到字符串
- 计时函数改为APR跨平台版本
- 增加Visual C++ 2010 Service Pack 1提示
- 增强Affector/AffectorTrackTimer安全性
- SAFE_CLEAR_OBJECT_ARRAY等宏改进,更安全
- 改进任务管理器TaskManager
- 修复按键映射类
- 修正Vertex2::Length()计算没有sqrt问题
- 编译/库连接宏增加对VC/CB未知版本支持
- 删除废弃的Coll2D
- 删除没有实现的FlowTransition
- 删除非原始光盘检测函数
- 实现影响器版本矢量追踪
- 系统路径检测增加公共应用程序路径和本地应用程序路径
- 增加非Win32平台下插件再增加平台名称后缀标识
- 提供部分Win64平台插件
- 全新的智能指针系列,仿c++11标准设计
- 修订WideString/StringList,使之处理数据更为严谨.
- FileInfo::directory改名为is_directory
- 统一ansi<->wide转换处理代码为一处、增强wide_to_utf8/utf8_to_wide
- 增加utf16/32至wchar_t的转换功能
- Stream及派生类增加CanSeek,CanRead,CanWrite属性
- 完善StringList,增加对utf32以及对CPU大小头的支持
- 字符串函数返回值由int改为size_t,保持和标准crt库一样。
- 清除旧有MD5算法实现,增加新的md5类,归属UnilityTools,头文件为ut/md5.h,源代码为UtilityTools/Hash/md5.cpp,md5util.cpp,新的使用apr实现。
- 操作系统识别增加BeOS/Haiku,QNX
- 操作系统识别将BSD分裂为FreeBSD,NetBSD,OpenBSD
- CPU识别将MIPS分裂为MIPS,MIPSel
- 编译器识别增加PGI,TI,LLVM Clang
- 字符串函数全部提为模板实现,以方便未来支持任何类型的字符串。
- 修正gnu c/c++与linux操作系统头文件配置不正确问题
- 所有Stream长度单位改为int64
- 增加Endian转换处理
- 更改日志输出目录,以及处理机制。(Windows UAC兼容性提升)
- 增加对库的大头小头检测,以避免宏错误识别
多线程、多进程:
- 删除原本的模拟RWLock,改为Win2008 R2/Win 7专有SRWLock,其它情况使用APR实现。(注:原本模拟RWLock即采用APR代码实现)
- ThreadMutex删除不曾被任何工程使用的WaitLock函数
- ThreadMutex增加APR跨平台实现版本
- 删除Thread::Sleep函数,请改用WaitTime函数,以免造成与Windows api冲突
- 删除CircleStream,增加RingBuffer,功能基本替代,但更强大
- 添加多进程共享内存模块,使用APR实现
- 增加进程排斥模块
- 增加CondVar,包含Win2008/Vista专用版和APR跨平台版
- Thread::Execute改为循环执行,以返回值区分是否继续执行
- Atomic增加volatile修饰,并改用APR实现
- Thread类删除Pause/Resume函数
- 增加Thread类的posix thread实现
- 增加Semaphore类的posix thread实现
脚本部分:
- 删除AngelScript支持
- DevilScript/DevilVM增加x86-64位函数呼叫支持
网络部分:
- 增加network名字空间,将所有网络模块移置network名字空间
- TCPServer发送数据从自有多线程阻塞模式发送改为IOCP多线程发送
- 修正TCPServer在WindowsXP操作系统下运行错误的问题
- 将网络处理代码中的各种错误和数值全部抽调并定义宏集中放置于Socket.H,以增加开发者查看源代码时的易读性
- TCPSocket将部分设置改为宏在Socket.H中标记
- TCPSocket默认提供的封包类型和封包长度数据类型改为可自定义
- 重构TCPServer,增设TCPAcceptManage,分离TCPServer本身与接入者管理。分离原有IOCP支持为IOCPAcceptManage,并增加多Select模式的MSAcceptManage。
- Socket增加SetNodelay函数
- TCP部分增加全新的封包自动分发机制,自动分发机制并不是直接简单的按表分发,而是减少了一次内存拷贝,比手动模式更有效率
- IOCPAcceptManage/MSAcceptManage改为池管理连接
- TCPSocket::UseSock改名为UseSocket
- 修正TCPMultiAccept模式下第一次通信会等待的问题
- 砍掉TCPClient::Disconnect等待线程自动退出设计
- 解决TCPClinet退出需要等待过久问题
- MTBAccept增加发送处理的安全锁处理
- 为各TCPAccept派生类增加CloseSocket重载,以处理各类需要特别处理的部分。
- 增加Multi Thread Block模式
- 增加MSAccept::RecvData/SendData的安全性
图形部分:
- 升级GLEW到1.7.0
- HTP增加自定义绘制方法
- 改进截图程序处理流程,提升代码易读性、美观性与执行效能
- 删去DrawArray中的double数据类型支持
- 优化hgpuiButton加载图层代码
音频、视频部分:
- 修正音源距离描述注释,并修改变量名称以更为清晰表达意思
- AudioPlayer增加淡入淡出处理
- 修正TheoraMovie无音频时无法播放问题
- 修正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等不明确转换也变成了必须进行明确指定转换体系等等。