|
本是
银牌会员
积分 2201
发帖 789
注册 2005-1-27
状态 离线
|
『楼 主』:
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中的程序代码。
附件
1: Linex.rar (2006-8-18 14:48, 14.5 K, 下载附件所需积分 1 点
,下载次数: 34)
|
my major is english----my love is dos----my teacher is the buddha----my friends--how about U |
|
2006-8-18 14:48 |
|
|
JonePeng
金牌会员
D◎$ Fαп
积分 4562
发帖 1883
注册 2004-1-19 来自 广东广州
状态 离线
|
『第
2 楼』:
VGA12h 给我的感觉就是一个字--慢。
而且颜色只有16色,分辨率只有640×480。
我以前研究过256色的800×600、1024×768界面的VESA编程,VGA12H没什么兴趣。
|
----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
|
|
2006-8-18 23:55 |
|
|
本是
银牌会员
积分 2201
发帖 789
注册 2005-1-27
状态 离线
|
『第
3 楼』:
JonePeng,如果你有VESA比较全面、实用的资料,请提供一些网址吧!
|
my major is english----my love is dos----my teacher is the buddha----my friends--how about U |
|
2006-8-20 00:27 |
|
|
zyl910
中级用户
积分 282
发帖 126
注册 2006-5-17
状态 离线
|
『第
4 楼』:
如果线的颜色是固定的话
用写模式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 ]
|
人类存在的目的就是试图理解人类为何存在 |
|
2006-9-3 09:53 |
|
|
本是
银牌会员
积分 2201
发帖 789
注册 2005-1-27
状态 离线
|
『第
5 楼』:
RE:zyl910:
好书! 什么地方有买?
|
my major is english----my love is dos----my teacher is the buddha----my friends--how about U |
|
2006-9-3 11:12 |
|
|
zyl910
中级用户
积分 282
发帖 126
注册 2006-5-17
状态 离线
|
|
2006-9-3 20:35 |
|
|
本是
银牌会员
积分 2201
发帖 789
注册 2005-1-27
状态 离线
|
『第
7 楼』:
英文版的文件怎么那么多?
中文版下载需要积分?
不过还是要谢谢ZYL910!!!
|
my major is english----my love is dos----my teacher is the buddha----my friends--how about U |
|
2006-9-4 11:03 |
|
|
zyl910
中级用户
积分 282
发帖 126
注册 2006-5-17
状态 离线
|
『第
8 楼』:
那本书是有很多章:
Quote: | 译者序
前言
第1章 大脑是最好的优化器
第2章 汇编优化
第3章 综计时器
第4章 时钟周期耗时的本质
第5章 使用可重用块进行优化
第6章 透过表面价值
第7章 局部优化
第8章 使用汇编语言加速C程序
第9章 读者使我成功
第10章 耐心编码,使速度加快
第11章 286和386的研究
第12章 486的研究之一
第13章 486的研究之二
第14章 Boyer-Moore串搜索方法
第15章 链表
第16章 代码的优化永无止境
第35章 Bresenham线段绘制算法
第36章 Bresenham步距长度片算法
第37章 步距长度片绘制算法的优化
第38章 多边形原操作
第39章 快速的凸多边形填充算法
第40章 复杂多边形的简化
第41章 多边形命名的重要性
第42章 Wu的反走样算法
第43章 位面动画
第44章 使用拆分屏幕的页面翻转
第45章 “脏矩形”动画
第46章 使用屏蔽图像的“脏矩形”动画
第47章 模式X: 神奇的256色VGA模式
第48章 模式X对锁存器的使用
第49章 模式X的256色动画
第50章 三维动画
第51章 背面删除方法
第52章 快速3D动画:使用X-Sharp
第53章 最高速度及其它
第54章 3D浓淡处理
第55章 256色模式中的颜色表示
第56章 纹理映射
第57章 多边形纹理映射的优化
第58章 纹理映射的优化
第59章 BSP树
第60章 编译BSP树
第61章 参照物
第62章 BSP绘制算法
第63章 实时3D处理的浮点操作
第64章 Quake的可视表面判别
第65章 3D裁剪
第66章 Quake中面的消隐
第67章 实现跨度排列
第68章 Quake的光照模型
第69章 表面cache和 Quake的三角形模型
第70章 Quake: 回顾和展望 |
|
至于中文版——
是我上传的
为了混点积分下载其它电子书,所以设置了5点积分,请见谅
Quote: | 注册成为得益网用户 2分
每天登录得益网 1分
每上传一条资料 2分
上传资料被人下载 每次获得设定的分数/5 |
|
[ Last edited by zyl910 on 2006-9-4 at 21:13 ]
|
人类存在的目的就是试图理解人类为何存在 |
|
2006-9-4 21:11 |
|