![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-01 21:06 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,249 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » VGA12h模式下GUI界面设计的速度考虑 |
| 可打印版本 1,900 / 7 |
| 第1楼 本是 | 发表于 2006-08-18 14:48 |
| 银牌会员 发帖 790 积分 2,227 | |
|
VGA12h模式下GUI界面设计的速度考虑 VGA12h模式下GUI界面设计的速度考虑
1。 VGA12h模式下各种不同方式划线1满屏的耗时对比: ============================================== 划线方法 耗时(秒) 运行程序* 写次数 线性地址计算 REG设置 ----------------------------------------------------------------------------------------------------- 扫描划块(REG) 0.046343422 lineff.com L*P/8 线间不重复 不重复 扫描划线(REG) 0.061104584 linehh.com L*P/8 线间重复 线间重复 垂直划线(REG) 0.326120375 linev.com L*P 点间不重复 线间重复 普通划线(REG) 0.823882125 linen.com L*P 点间重复 线间重复 ----------------------------------------------------------------------------------------------------- 普通划点(BIOS) 3.899710625 lineb.com L*P 点间重复 点间重复 ============================================== 注:REG--VGA寄存器 BIOS--BIOS中断 L--线条数 P--像素数 * --lineff.com、linehh.com划线100*16屏,其余.com划16屏 由此可见,BIOS描点划线速度太慢(耗时约为扫描线法的64倍),在GUI编程中不予考虑。即使是采用VGA寄存器编程,普通划线耗时约为扫描线法的13.5倍,普通划线耗时约为垂直线法的2.53倍。 注意:lineff.com和linehh.com的方式是都是划扫描线,而且因为线条的起止落在8的倍数的像素上,所以每次写8个像素,划块、划线速度最快,lineff.com因为线间不重复计算地址,所以更快,耗时是linehh.com的3分之2!linev.com是划竖线最快的方式,原因同扫描线划块--不重复计算地址!划非水平线、非竖线的其它线条,就只能采用普通划线方式。 所以,在要求速度的GUI设计中划块要用lineff.com方式,划框线要用linehh.com和linev.com方式,而不是用linen.com普通划线方式! 2。 绝对压榨速度的几点考虑: 在用VGA寄存器法划线时,必然要经历先①计算视频缓冲线性地址、②计算位屏蔽值、设置位屏蔽等寄存器,然后③描点划线,最后④恢复改动过的寄存器的默认值这几个阶段。 在第①环节中可能用到乘除法,但乘法和除法被公认为开销较大的运算,遇到需要反复执行的乘除法时,应该以移位和加法替代,左移1位相当于乘以2,右移2位相当于除以4。在许多绘图算法里计算地址时都要用到乘以80,可如下计算: 80*y=(64+16)*y=(y shl 6)+(y shl 4) 汇编代码为: mov ax,y mov cx,4 shl ax,cl ;y*16 mov bx,ax shl bx,1 shl bx,1 ;y*64 add ax,bx ;(y*64)+(y*16) 在第②③④阶段必然用到的寄存器操作中,是用out dx,al还是out dx,ax,效率也是不一样的。如下程序段: mov dx,3CEh xor al,al out dx,al inc dx mov ax,Color out dx,al dec dx mov al,1 out dx,al mov al,0Fh out dx,al 可考虑改成: mov dx,3CEh xor al,al mov ah,Color out dx,ax mov ax,0F01h out dx,ax 在划线的各个阶段中,都可以注意一下此步操作有无必要重复,如有固定的增量关系等,可以简化,如无必要,则可省略。可参照line?.com中的程序代码。 附件 Linex.rar (14.5 KiB) |
|
| 第2楼 JonePeng | 发表于 2006-08-18 23:55 |
| 金牌会员 发帖 1,883 积分 4,562 来自 广东广州 | |
|
VGA12h 给我的感觉就是一个字--慢。
而且颜色只有16色,分辨率只有640×480。 我以前研究过256色的800×600、1024×768界面的VESA编程,VGA12H没什么兴趣。 |
|
| 第3楼 本是 | 发表于 2006-08-20 00:27 |
| 银牌会员 发帖 790 积分 2,227 | |
|
JonePeng,如果你有VESA比较全面、实用的资料,请提供一些网址吧!
|
|
| 第4楼 zyl910 | 发表于 2006-09-03 09:53 |
| 中级用户 发帖 126 积分 282 | |
|
如果线的颜色是固定的话
用写模式3比较好 写模式3下,会将CPU数据作为位屏蔽,可以避开低效的IO操作 其实VGA有256KB显存,通过修改某些关键寄存器可以实现高分辨率8位色模式: 320*240*8 // 传说中的Mode X。许多游戏用这种分辨率 320*400*8 // Windows 9X启动画面用的就是这种分辨率 320*480*8 360*350*8 // 某些视频播放软件用这种分辨率,因为它与QCF分辨率352*288最接近 360*480*8 // 至今为止,分辨率最高的VGA8位色模式 ... 水平分辨率选择: 320, 360 垂直分辨率选择: 200, 240, 350, 400, 480 理论上可以修改CRT控制器的参数以得到任意分辨率,但我不敢乱试。比如400*300的分辨率很不错,希望有人能试出来。 推荐: 题名: 图形程序开发人员指南(Michael Abrash's Graphics Programming Black Book Special Editior) 作者: Michael Abrash 丛编题名: 计算机软件开发与程序设计系列丛书 ISBN号: 7-111-06396-1 出版发行项: 北京-机械工业出版社 1998-08-01 载体信息: 1064页 26cm ¥128.00 个人名称—等同责任者: Abrash 个人名称—等同责任者: 前导工作室 中图图书分类法类号: TP391.41-62 本书由浅入深,由高层到底层,系统、全面地介绍了高性能图形编程的的各种知识和技能。作者首先详细地讨论了x86系列计算机的硬件及其优化特性、图形编程以及逐步优化的技巧、给出了每一种优化的分析过程、程序清单和性能对比。然后形成了一个基于模式X的通用动画图形软件包X-Sharp。最后介绍了Quake的研究和实现技术。 本书分为两大部分,第一部分主要介绍汇编优化;第二部分主要介绍图形硬件(VGA)、高性能图形编程和优化。程序用C语言和汇编语言编写。 [ Last edited by zyl910 on 2006-9-3 at 09:55 ] |
|
| 第5楼 本是 | 发表于 2006-09-03 11:12 |
| 银牌会员 发帖 790 积分 2,227 | |
|
RE:zyl910:
好书! 什么地方有买? |
|
| 第6楼 zyl910 | 发表于 2006-09-03 20:35 |
| 中级用户 发帖 126 积分 282 | |
|
一、去旧书店看看,也许找得到
二、去超星看电子版 英文版: http://public.planetmirror.com/pub/gpbb/ 翻译的(超星扫描版转pdf的): http://www.netyi.net/book/933a25cf-fa0e-4dab-b9d7-e58a0ea8f52e.aspx |
|
| 第7楼 本是 | 发表于 2006-09-04 11:03 |
| 银牌会员 发帖 790 积分 2,227 | |
|
英文版的文件怎么那么多?
中文版下载需要积分? 不过还是要谢谢ZYL910!!! |
|
| 第8楼 zyl910 | 发表于 2006-09-04 21:11 |
| 中级用户 发帖 126 积分 282 | |
|
那本书是有很多章:
至于中文版—— 是我上传的 为了混点积分下载其它电子书,所以设置了5点积分,请见谅
[ Last edited by zyl910 on 2006-9-4 at 21:13 ] |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |