易码技术论坛

 找回密码
 加入易码
搜索
查看: 786|回复: 7

[GB/NDS] YSLib PreAlpha 4-

[复制链接]
发表于 2012-7-16 10:50:31 | 显示全部楼层 |阅读模式
突然上不去yayabo.cn,所以这里备份一下吧……
项目维护用地址:http://code.google.com/p/yslib
当前更新记录页面:http://tieba.baidu.com/p/1511876559
↓contents
(10000字符泥煤。。。= =)

[ 本帖最后由 FrankHB 于 2012-7-16 11:02 编辑 ]
 楼主| 发表于 2012-7-16 10:51:09 | 显示全部楼层

>PreAlpha 1 & +

====
2011-04-09
优化选项相关 bug 修复。
发现新的 DeSmuMe 的 release 应该两个月前可以用了,不过我仍然用更新的SVN版……
====
2011-03-20
发现优化 -O0 以上除了 -Os 外出问题(莫名其妙就控件状态就乱掉了),照着 gnu.gcc.org 上的Manual上的优化选项一个个试了,居然全部没问题……
更orz的是 -Os 加上对照 -Os 禁用的选项后文件体积还缩小了 1K 。
暂时先这样,继续原因不明好了……
====
2011-01-21
补遗:使用新版本 DeSmuME 可以运行。因为我不时更新SVN版,所以没很长时间没注意到 devkitPro 官网上说的最近的libnds无法在最新的 DeSmuMe 的 release 版(0.9.6;这个版本还有关于 FAT 访问的 bug )中运行……
顺便删了 makefile 里面的 DLDI patch 命令行(反正模拟器会自动打补丁)。
====
2011-01-19
为了继续减少重复编译的工作量,继续把 ARM9 和 ARM7 目标文件也拆分出来改成项目了。
结果发现因为懒得写makefile项目之间的依赖性(似乎也确实不怎么容易 include ,路径变量什么的都是一堆export= =),结果反而导致在更新被依赖的库的时候导致生成的.nds不是最新版本,因为 ARM9/ARM7 的目标文件都是最新的……
需要手动右键->仅用于项目->仅清除...把 ARM9 的目标文件清理掉(其实也可以写个批处理什么的,不过这里的文件不多,重复编译花不了多少时间,于是又懒得搞了(_ _))才可以保证生成最新的 .nds 。
另外 VS 偶尔会脑残地把配置 debug 当成 Debug (注意这里区分大小写)导致编译失败(不一定失败,只是makefile里面定义了 NDEBUG 宏,即使编译成功也会很麻烦,像莫名其妙多出来的 memory leaks 检测结果等等)……关掉VS重新打开解决方案应该就行了。
当然自己手动分别 make 应该是最保险的,只是我也懒的搞……= =...最简单的可以直接重新生成解决方案然后就可以一边去打灰机钓妹子(以下略)之类,等个大约5分钟就可以编译好了(我的笔记本上)。
====
2011-01-16
为了减少重复编译的工作量,把几个自制的库改成 VS2010 项目了。
清理项目删除不掉VS生成的 .log ……嘛,无视。
====
2010-10-27
改了一下配置,不过因为我不会改内置宏,也不会写 makefile ,项目配置基本成了摆设。于是 Debug/Release 也就是装潢门面, .nds 得到 Release 目录找, Release 连个 NDEBUG 都没有,还要手动定义……
====
2010-10-09
补 Loki 的 MIT License ,orz...
====
2010-09-29
迁移至 Visual Studio 2010 。
自动转换解决方案和工程文件(保留了旧版本)。
环境变量 NDSEmulator 去除引号,例如 F:\devkitPro\PALib\emulators\DeSmuME\DeSmuME.exe 。
现在的调试命令行是类似这样的:$(NDSEmulator) $(ProjectDir)$(NMakeOutput) --cflash-path=H:\NDS\efsroot。
之后就可以正常编译了。
====
2010-05-09(PreAlpha 1 Release@yayabo.cn)
意义不明的框架库和附属品,半成品,对于开发人员以外完全没有价值。包含了框架库的测试程序,不过似乎完全无法体现设计目标= =...
嗯,基本上就是能用 TTF 字体,然后一些显示简单界面焦点响应什么的一个玩意……理论上来说做好了能完秒 MoonShell ,不过实际又是另外一回事了……

工程名字什么的……是随机取的。如有雷同纯属巧合。
库文件组织,代码风格,为什么用 VS 等请勿吐槽。
本体基本上是平台无关的,不过程序初始化部分还是保留了和一些 DS 相关的东西。
源码很大部分抄自 VNDS ,不过除了一些没删掉的注释和空行以外,基本上每行都修改过。
测试程序中,除了本体以外的是支持用的库。Freetype 改用了新版本结果发现编译出来的文件很大只能用旧的.a文件, AGG 移植好了发现不实用(姑且保留)、 Loki 太深奥所以基本上没用到,感觉灰常失败o.o。。。
其它部分都是自己写的(当然,参考了下载到的一些资源)。  
文档基本属于摆设。

efsroot是放外部文件的(以前用到 EFS ,名字也懒得改了)。
efsroot\Font\下需要自己往里面放 TTF 文件(可以多于一个)。
剩下的除了文档以外是一个完整的 VS2008 工程。当然,可以手动 make 。

用到了 DLDIrc ,不需要的话在 Makefile 里面找下面的路径改掉:
@D:/Progra~2/DLDIrc/dlditool.exe "D:\Program Files (x86)\DLDIrc\drivers\mpcf.dldi" $(OUTPUT).nds。
另外,Makefile 是基于 devkitPro 的,没装的话当然编译不了。 devkitPro 我用的是最新的(对应devkitARM r30) ,旧的 Makefile 应该有点不一样,需要手动修改(具体哪些地方我忘了- -...)。不过规模不大,新写一个应该也不会太困难。
话说工程是用 VS2008 配合 PALibAppWizard 创建的,后来移除了 PALib 的部分,不知道还需不需要……
我用到的一些环境变量:
DEVKITARM = /F/devkitPro/devkitARM
DEVKITPPC = /F/devkitPro/devkitPPC
DEVKITPRO = /F/devkitPro
DEVKITPSP = /F/devkitPro/devkitPSP
DKP_HOME = F:\devkitPro
NDSEmulator = "F:\devkitPro\PALib\emulators\DeSmuME\DeSmuME.exe"

用 DeSmuME 调试命令行看起来是这样:
$(NDSEmulator) $(TargetPath) --cflash-path=H:\NDS\efsroot

使用了一些外部的库,虽然都可以不用GNU GPL的,不过保留在注释的一部分 VNDS 代码没删干净,不得不用GPL发布。

感想:伟大的雷叔在程序群里曾经教导过说,在 DS 上面写界面库是愚蠢的行为。果然如此。所以我决定把愚蠢贯彻到底(虽然有点微妙的变化= =),这样好歹对自己随口挖的坑有个交待……

[ 本帖最后由 FrankHB 于 2012-7-16 11:00 编辑 ]
 楼主| 发表于 2012-7-16 10:51:31 | 显示全部楼层

>PreAlpha 2 & +

====
2012-04-09
完善框架实现:
基础架构和核心抽象实现调整;
增加各种语言层次上的优化;
增加高精度计时器;
消息类型调整和消息队列实现;
增加事件类型优先级支持;
微调块传输贴图算法;
部分完成 MVC 分离;
增加允许在运行时调整渲染策略的部件渲染支持;
增加基于无效矩形算法实现的部分渲染……
完善示例程序:
release 版本对于某些字体来说效率上可以基本适应实际需要,但仍然无法使用带有位图的字体(显示错误,疑似 freetype 的 bug )。
文本阅读器修正若干文件读取和布局渲染 bug (重新实现缓冲算法);增加菜单和设置界面;增加进度显示和随机定位功能;增加背景色和文本色调整、字体调整、字体大小调整;增加阅读历史记录(前进/后退);增加自动(可选以文本或像素行作为单位)滚屏;增加编码自动识别。
增加十六进制浏览功能。
主界面增加可选的 FPS 显示(伪;实际上是消息循环速率)。
增加 IDE 支持:
可使用 Code::Blocks 。
增加生成平台:
Build 299 起支持 MinGW(g++4.7.0) 编译生成 Win32 本机程序。 MinGW 下载: http://code.google.com/p/mingw-builds
使用 Code::Blocks 打开工作空间文件直接生成(暂不支持 Visual Studio 生成)。
其它注意事项:
已确认 DeSmuMe SVN r4030 起有 bug 打开 .nds 后无法正确读取文件。
配置文件默认路径仍然是硬编码的(见YSLib/Helper/Initialization),根目录为 "H:\\NDS\\EFSRoot" ,所以运行的时候可能有些麻烦……
本机程序←→×之类的无法显示(大概也是 freetype 问题),于是有些按钮没文本看起来是空的……= =
====
2011-04-11(PreAlpha 2 Release)
PreAlpha 2(Build 200) 发布。
维护地址: http://code.google.com/p/yslib  。源码可以在那边下载。
界面完善了点。其它么……没什么对最终用户而言特别突出的特性。当作阅读器而言仍然很不完善,书签啥的都没有。唯一一个显著的进步是效率(界面响应在 release 版本下比较流畅)。此外就是细节上(但实现起来比较麻烦)的东西了,像是连续响应输入之类。
代价……重构掉的代码少说也是之前的 5 倍。
增加的特性除了以上内容外,主要是只对于开发而言有用的:
自定义宏(缩减代码长度用,否则光是写getter就会疯掉);
多播委托模板;
事件映射表(只是用来压缩接口个数……);
字符光栅化模板和渲染器(我真的只是重复发明轮子没刻意山寨M$- -,即使类名类似也不要脑补有相同的功能);
依赖事件(同上);
事件路由(同上)。
注释文档可以用 Doxygen 编译(我用的好像是 1.7.2 )。
还是集成测试代替单元测试,所以版本号不表示实际编译次数。 Build 是全编译版本号,每次预定平均增量编译64次。
测试基本完全语句覆盖,不过应该还有很多 bug 。

[ 本帖最后由 FrankHB 于 2012-7-16 11:01 编辑 ]
 楼主| 发表于 2012-7-16 10:52:08 | 显示全部楼层

>PreAlpha 3 & +

====
2012-07-10
更改了 CHRLib 载入非 Unicode 编码(目前只有 GBK )的方式,由纯静态链接改为数据从路径 /Data 中的编码表文件读入。当前 GBK 对应的编码表文件为 cp113.bin 。
需要在初始化时保证载入正确,否则可能引起断言失败( debug 配置下)或未定义行为( release 配置下)。
====
2012-04-12(PreAlpha 3 Release)
增加 MinGW 动态链接库。
增加配置文件生成,文件名为 config.txt ,编码为 UTF-8 (默认生成的有 BOM ,不过读取的不限,反正没 BOM 全 ASCII 按 ANSI 读也一样,有非 ASCII 字符一般能自动猜出来……)。
当前配置文件内容只有三行路径,依次为程序工作目录(初始化完毕后getcwd()取得的目录),矢量字体路径(会优先读取此路径的字体文件),矢量字体目录(会读取此目录下所有字体文件)。路径长度不超过 80 字节(多了会被截断)。
默认配置内容硬编码于 YSLib/Helper/Initialization.cpp 。

[ 本帖最后由 FrankHB 于 2012-7-16 11:01 编辑 ]
发表于 2012-7-16 15:00:41 | 显示全部楼层
orz,在做DS的indie game?
还用了Loki...
发表于 2012-7-16 16:41:42 | 显示全部楼层
汗,居然想到来这里备份
 楼主| 发表于 2012-7-18 00:55:24 | 显示全部楼层

回复 5# 的帖子

没特别做成游戏,只是一般的GUI  Framework……虽然能当游戏框架来用不过更不完善就是了。
移植到Win32凑数当毕设。长期目标是干掉Qt/wx/GTKmm。
 楼主| 发表于 2012-7-18 00:57:27 | 显示全部楼层
原帖由 FantasyDR 于 2012-7-16 15:00 发表
orz,在做DS的indie game?
还用了Loki...

另外Loki已经全部移除了,自从决定启用C++11特性以后……还是std::shared_ptr/std::weak_ptr、std::function等更好用些。
发表于 2012-7-22 20:07:15 | 显示全部楼层
原帖由 FrankHB 于 2012-7-18 00:55 发表
没特别做成游戏,只是一般的GUI  Framework……虽然能当游戏框架来用不过更不完善就是了。
移植到Win32凑数当毕设。长期目标是干掉Qt/wx/GTKmm。


咳,干掉Qt.....
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-28 20:57 , Processed in 0.012089 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表