| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3821 人关注过本帖
标题:[讨论]>>>关于本版今后的技术讨论方向
只看楼主 加入收藏
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
DirectDraw 没有什么好学的,并且 DirectDraw 并没有提供给我们什么东西,仅仅提供了一种在 windows 平台下直接访问显存的一种手段,连基本的绘图函数都没有提供,仍然需要借助于 GDI 进行绘图。DirectDraw 环境下的 GDI 虽然说会快一点,但是许多情况下仍然不能满足需求。因此,在 DirectDraw 下,我们仍然需要直接访问显存,并且自己封装出一套图形库,这同 DOS 下的 SVGA 编程在本质上没有什么区别。因此,DirectDraw 应该被称作是 windows 平台上,微软对 VBE 的一种封装,因为 windows 下不能访问 VBE,因此微软就给出了 DirectDraw。

DirectDraw 所提供的功能真的很少,并且这些功能在 DOS 下通过 VBE 都能实现。然而,DirectDraw 的使用却是相当的繁琐,不如 VBE 的调用来的简洁。
2007-09-07 10:11
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
Borland 的 BGI 开发包我有,包括文档,参考代码和相关工具
使用这个开发包,你可以开发自己的 BGI 驱动
2007-09-07 10:24
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
以下是引用RockCarry在2007-9-7 10:11:45的发言:
DirectDraw 没有什么好学的,并且 DirectDraw 并没有提供给我们什么东西,仅仅提供了一种在 windows 平台下直接访问显存的一种手段,连基本的绘图函数都没有提供,仍然需要借助于 GDI 进行绘图。DirectDraw 环境下的 GDI 虽然说会快一点,但是许多情况下仍然不能满足需求。因此,在 DirectDraw 下,我们仍然需要直接访问显存,并且自己封装出一套图形库,这同 DOS 下的 SVGA 编程在本质上没有什么区别。因此,DirectDraw 应该被称作是 windows 平台上,微软对 VBE 的一种封装,因为 windows 下不能访问 VBE,因此微软就给出了 DirectDraw。

DirectDraw 所提供的功能真的很少,并且这些功能在 DOS 下通过 VBE 都能实现。然而,DirectDraw 的使用却是相当的繁琐,不如 VBE 的调用来的简洁。

这样说有点一棍子打死的感觉,其实VBE不是万能的,光DDRAW中提供的那些硬件加速特性VBE就难以全部做到,VBE是现在显卡的一套基本子集,各显卡厂商还有更多的高级或者说现代特性,这些高级特性的使用通过WINDOWS的硬件无关抽象层连接到显卡的驱动,显卡提供相应的能力的DDRAW直接调用,没提供的可以软件实现,2D这样,3D就更不用说了,显卡厂商制造的时候就得按照DX的需要来,提供D3D要的特性。DX可能的确是不适合直接用于工程,不过有大量的第三方封装引擎可以选用,可以避免与生涩的COM打交道。

2007-09-07 10:36
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 
当然这也没有觉得VBE不行的意思,我个人对VBE也是很有感情的,负责任的说一句,只要代码架构设计的科学,细节优化的好,VBE足够编写任何2D游戏了!
就拿我以前做的NEO来说吧,架构谈不上好,优化的也很马虎,但效率已经够做普通游戏这个级别了。如果重新设计再重点优化的话(比如引入汇编优化关键位置等等),FPS还可以有较大的提升空间。何况NEO主要是针对16位的编译器的,光显存映射换页就是一个瓶颈了,如果在32位编译器下进行显存的平坦线性寻址,再加上32位的总线带宽的传输能力,性能翻番不成问题。
2007-09-07 10:47
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 

我很难想到,除了能够直接访问显存之外,DirectDraw 还能为我们提供哪些硬件上的加速。事实证明,DirectDraw 下的 GDI 的确是慢速的,因此说,在几何图形的绘制上,DirectDraw 并没有提供硬件上的加速。

至于 DirectDraw 所提供的换页操作,在 VBE 中已经定义,并不是 DirectDraw 所独有。超大屏的 Surface 也是利用 VBE 来实现的。而离屏 Surface 等等,则不过是一些存放在内存或显存中的对象而已。

唯一可能存在硬件加速的,可能就是位块传送函数,但这种硬件加速,也仅限于显存内部的位块传送。主存到显存之间的位块传送操作,恐怕都需要 CPU 的介入,因为显卡作为一个图形处理器,能够直接访问主存的可能性不大,因此说主存和显存之间的 blt 很难有硬件上的加速。以目前的情况来看,CPU 对主存的访问要比对显存的访问快,因为主存技术发展很快,这包括存储芯片和总线技术的发展,并且 CPU 内部有 cache(显存是必须写穿的 Write-through,否则图像的显示就不正常,因此无法用到 cache)。因此,多数情况下,人们都更加喜欢使用主存。因此,在 2D 图形上,显存除了用于显示,换页,超大屏幕,已经没有更多的用途。而显存到显存的 blt,即便真的有加速,我想也很少会被人们用到。

应当承认的是,DirectDraw 是微软这样的大厂商所提出的,因此能够得到更多厂商的支持。标准化已经是发展的趋势,然而 DirectDraw 并不是一个真正意义上的标准,微软只给出了用户方面的接口,而没有更加公开的给出内部的细节,以及下层驱动的接口(其实 DDK 的 MSDN 已经给出),因此他不具备开放性。另一方面,DirectDraw 只能用于 windows 平台,有明显的局限性。因此说,VESA 所给出的 VBE,才是真正意义上的标准(仅指2D),具备开放性和跨平台性。在2d方面,就算有新的特性出来,我想也该是写入 VESA 的标准,而不是 DirectDraw,DirectDraw 只是 VBE 标准之上的一个软件层。

分析目前显卡的发展趋势可以发现,在 2D 方面已经很成熟,即直接可访问的显存,换页等,基本上不会再出现新特性。而在 3D 方面,真正意义上的标准还没有建立起来,OpenGL 和 Direct3D,都只是事实上的工业标准,随着 3D 技术的不断发展和完善,必然会建立起标准化的组织,来制定 3D 图形的标准。我希望通过这样的标准,我们可以直接访问显卡的3D图形控制器,这样可以使3d功能应用于更加广泛的 PC 机操作系统平台,而不仅仅局限于 windows 和 linux。或者说通过这个标准,来建起一个与操作系统无关的 3D 图形功能的调用层(类似于 VBE),来满足不同系统对 3D 功能的需求。

2007-09-07 12:37
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
当然标准化上会存在许多利益冲突,微软当然不愿意看到其它平台上也出现高性能的 3D 图形系统,而一些硬件厂商也不愿意公开自己技术细节。也就是为什么我们在 3D 上只能看到 D3D 和 OpenGL 的原因。路是漫长的。
2007-09-07 12:43
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 

我并未否认VBE,毕竟大多的2D特性是建立在VBE上的,但硬件Blit和ColorKey也是有用的,DDRAW虽然没直接提供几何绘制接口,用GDI当然可以,但效率过低,直接LOCK表面再写显存当然也可以,但比起反复的加锁和解锁来说,硬件位块传送就显得有用了,画点函数可以这样做:建立一个支持硬件位块传送的surface,大小为1X1,即一个像素,往目标表面指定位置直接Blit。如果觉得这个比显存直写来的快不了多少的话,水平线和垂直线可能更能运用这个硬件加速特性。对支持硬件加速的Colorkey位块传输在下更是垂涎已久。我赞成2D图形处理不会也不必增加更多的特性,VBE本身提供的说出来也就主要也就两种而已——显存直访、显存首址重定向(其应用可衍生出换页和大虚拟屏幕等),就这些了,已经满足2D处理的应用了。如下图:

DDRAW
______________|______________
| |
VBE 厂商特性
(显存直访、首址重定向等) (硬Blit等)

实在不算多,说DDRAW没多提供什么,那VBE本身又提供了多少呢?2D嘛,不是要多,而是要有用,VBE提供的都是极有用的,而从基本几何绘图到位图传输,有了那个厂商特性就如虎添翼。我眼巴巴的等着这个特性入标准呢……

我不认为显存用的频率一定会比主存少,也不认为主存和CPU的发展比显存及GPU快,当个人电脑还在用DDR2内在的时候显存颗粒已经是DDR3甚至DDR4了,而且容量越来越大——128M的普通的不能再普通,512M以上的都比比皆是;GPU的制程也直逼CPU,而且它要做的事只是处理图形而已(现在一些思路提出的利用GPU上的浮点运算单元协助处理CPU事务,利用GPU过剩的处理能力)。

写到最后,发现不是我们的观点不同,而是都对VBE有更高有寄望而已。

2007-09-07 13:33
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
VBE 和 DirectDraw 所扮演的角色不一样,VBE 是硬件接口的标准,需要尽量反映硬件特性,因此说,VBE 所提供的是多数显卡所具备的。而 DirectDraw 作为一个操作系统的图形层,我更希望它能提供给我们更多的图形函数。然而目前的 DirectDraw 似乎也仅仅是对 VBE 的封装而已,图形函数都没有实现,还需要借助 GDI,或者由用户自己访问显存,这多少有点让人失望。因此我说,DirectDraw 没有什么好学的,他也没有提供给我们什么。在 DirectDraw 之上,我们还需要做更多的工作。

另外 VBE Core 中是不会定义更多的功能的(包括绘图等),而在 VBE Core 之上有 VBE AF,不知道 DirectDraw 是否是建立在 VBE AF 之上。如果是这样,那么 DirectDraw 所提供的功能真的是太少了。
2007-09-07 14:28
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 

我还是那个看法,DirectDraw 其实就是 windows 下的 VBE,除此之外他并没有提供更多的功能。连一个图形库都谈不上
不过新版的 DirectX 中 DirectDraw 已经被 DirectGraphics 所取代。

2007-09-07 14:40
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
微软自己也发现,DirectDraw 提供的功能实在是太弱,因此新板DX中,DD已经没有资格成为DX中的一个独立功能模块了,取而代之的是 DirectGraphics.
2007-09-07 14:54
快速回复:[讨论]>>>关于本版今后的技术讨论方向
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043731 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved