游戏开发论坛

 找回密码
 立即注册
搜索
楼主: bluebaby9811

小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI引擎实

[复制链接]

45

主题

157

帖子

169

积分

注册会员

Rank: 2

积分
169
QQ
 楼主| 发表于 2009-6-21 09:55:00 | 显示全部楼层

Re: 小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI引擎

bluebaby9811: 小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI引擎实例2

[em2] 基于EVOLVEUIEngine和GDI+,大家快来捧捧场! [em2]

首次在淘宝开店成功,大家也来捧捧场!
http://item.taobao.com/auction/item_detail.jhtml?item_id=d7fe8e3d9bcc4dbbdd79063ac6740b92&x_id=0db1

45

主题

157

帖子

169

积分

注册会员

Rank: 2

积分
169
QQ
 楼主| 发表于 2009-6-21 10:14:00 | 显示全部楼层

Re: Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI

lidudu: Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI引擎实例2

GDI+不使用硬件加速,微软官方有明确说明。而且GDI+已经停止开发n多年了。反而GDI还在继续更新。因为GDI+没...

 
    “作为图形设备接口的GDI+使得应用程序开发人员在输出屏幕和打印机信息的时候无需考虑具体显示设备的细节,他们只需调用GDI+库输出的类的一些方法即可完成图形操作,真正的绘图工作由这些方法交给特定的设备驱动程序来完成,GDI+使得图形硬件和应用程序相互隔离.从而使开发人员编写设备无关的应用程序变得非常容易。”
  以上是引用百度百科上的一段文字,所以我认为说GDI+不使用硬件加速不妥,因为最终它还是靠硬件来完成真正的绘图工作的。只是为了实现设备无关性,中间多了一层接口。

2

主题

123

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2009-6-21 16:08:00 | 显示全部楼层

Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI引擎

作为技术人员,不能拿科普的资料当事实。GDI+是微软开发的,官方资料在那摆着,就算你不信,自己写段程序和GDI的速度比较一下也就发现了,完全不是一个数量级。

GDI+里唯一用到硬件的地方是将软件渲染的结果输出到屏幕的时候,这还是通过GDI实现的。

45

主题

157

帖子

169

积分

注册会员

Rank: 2

积分
169
QQ
 楼主| 发表于 2009-6-21 22:34:00 | 显示全部楼层

Re: Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI

lidudu: Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI引擎实例2

作为技术人员,不能拿科普的资料当事实。GDI+是微软开发的,官方资料在那摆着,就算你不信,自己写段程序和...

  GDI虽然速度快,可是它不支持ALPHA溶合啊。我觉得微软虽然说GDI和GDI+都不支持硬件加速,是因为要推广更先进的WPF。
GDI、GDI+曾经是Windows图形输出子系统,一点都不支持硬件加速是不可能的,要不然WindowsXP要四核的CPU才基本跑得动。而我曾把它装到赛杨400的机器上也没问题。
  你说让GDI和GDI+比较怎么个比法,那就好像C语言和C++语言比较,C++和C#比较一样,功能多一点,负担就重许多,速度肯定比不上,但它满足了我的要求的同时速度也在可以接受的范围内,这是最重要的。一昧的追求速度也不切实际吧!

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-6-21 22:51:00 | 显示全部楼层

Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI引擎

貌似WPF都是托管的吧,不太感冒

2

主题

123

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2009-6-22 12:57:00 | 显示全部楼层

Re: Re: Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的

bluebaby9811: Re: Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI引擎实例2


  GDI虽然速度快,可是它不支持ALPHA溶合啊。我觉得微软虽然说GDI和GDI+都不支持硬件加速,是因为要推广...


GDI支持硬件加速,只有在Vista上不支持,在Vista之前之后都支持。GDI+从来没有硬件加速,微软声称今后也不会有。WPF是根据硬件情况可能有可能没有。

GDI有alpha混合,并且是可以硬件加速的alpha混合,参见
BOOL AlphaBlend(
  HDC hdcDest,                 // handle to destination DC
  int nXOriginDest,            // x-coord of upper-left corner
  int nYOriginDest,            // y-coord of upper-left corner
  int nWidthDest,              // destination width
  int nHeightDest,             // destination height
  HDC hdcSrc,                  // handle to source DC
  int nXOriginSrc,             // x-coord of upper-left corner
  int nYOriginSrc,             // y-coord of upper-left corner
  int nWidthSrc,               // source width
  int nHeightSrc,              // source height
  BLENDFUNCTION blendFunction  // alpha-blending function
);
GDI功能上比GDI+少很多不意味着不能比较速度。

不是说GDI+不好,而是说GDI+比较慢,毕竟纯软件渲染和硬件加速不在一个数量级,但做UI足够了,因为UI不需要那么高的刷新频率。

另外,WPF也不是100%硬件加速,它的高级效果很多也是纯软渲染,一但用到了这些不能加速的功能,就会非常非常的慢。

还有,WPF不是GDI、GDI+的替代品,它们不是同一类型的东西,目前官方声明的替代品是DX11里的Direct2D,具有GDI+的全部功能又有硬件加速的新API,不过目前这个API非常的ugly,完全是个底层的东西,缺乏GDI+那样的易用性。

你愿意相信什么是你的事,我只是陈述事实。

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2009-6-23 18:46:00 | 显示全部楼层

Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI引擎

楼主英文不好吧~~只看中文资料是无法提高的,而且感觉你对某些技术资料的理解太过生硬了。这么多人旁征博引都不能改变你对GDI+固执的“假设”啊,呵呵。其实从GDI+的某些调用效果上来看就可以确定它是软件实现的Alpha混合。比如:使用一个尽可能大的窗口,例如最大化的窗口,获得他的Graphics对象,然后在上面填充一个和窗口一样大的半透明的矩形,你会发现这个过程很慢。这个足以证明GDI+的Alpha混合是在系统内存中做的,而系统也只有是CPU才能访问到的!具体原因如果你做过DD编程就应该知道。
这种商业代码我们无法直接看到内部实现机制,但是我们可以通过使用它所提供的功能猜到很多....

45

主题

157

帖子

169

积分

注册会员

Rank: 2

积分
169
QQ
 楼主| 发表于 2009-6-23 22:19:00 | 显示全部楼层

Re: Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI

artint: Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI引擎实例2

楼主英文不好吧~~只看中文资料是无法提高的,而且感觉你对某些技术资料的理解太过生硬了。这么多人旁征博引...

对很慢,当我不用双缓冲时,闪的不得了,但我用了双缓冲后,就不闪了。DD不也用双缓冲的吗?

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2009-6-24 11:35:00 | 显示全部楼层

Re: Re: Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的

bluebaby9811: Re: Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI引擎实例2


对很慢,当我不用双缓冲时,闪的不得了,但我用了双缓冲后,就不闪了。DD不也用双缓冲的吗?

重点我要说的是慢不是闪,呵呵。单纯的在GPU中进行Alpha合成或者在系统内存做Alpha合成都是很快的,这种方式进行Alpha合成时,因为需要屏幕上的像素数据,系统会把显存数据下载到系统内存,通过CPU合成后写回到显存,所以才慢。他的瓶颈是从显存复制数据到内存的过程。关于这方面的原理,我说下个人理解,没有求证过,请大家指正:
    Lock显存页面时,系统会分配一个没有实际物理页面的内存给应用程序。当应用程序读取这个内存时会引发异常,系统默认会在这个异常中处理把显存数据下载到系统内存,应用程序也会等待这个读取的过程。这个过程对于应用程序是完全透明的,可以像读取本地内存一样读取显存中的数据。但是这个过程并不是把所有显存数据(整个屏幕的数据)全部读取到系统内存,而是按需所取,所以在读取后面的数据时会频繁触发这个异常。整个过程就如你看到的---很慢。
    使用双缓冲就不一样了,因为你的缓冲图像是在系统内存的,系统可以很容易的进行读取和合成,所以过程很快。全部合成很快。最后把这个图像刷入显存,因为不需要原来屏幕的图像数据,所以整个过程是异步的“只写”过程,系统可以自由控制什么时候把系统内存中的数据上传至显存。

2

主题

123

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2009-6-24 19:36:00 | 显示全部楼层

Re:小弟新写的一些UI控件拿出来SHOW哈-超强扩展性的UI引擎

闪不闪 和 速度快慢 是两个不同的问题。

双缓冲主要是用来解决闪的,它本身对速度的影响是负面的,因为多了一次复制。软件渲染的双缓冲完全是CPU在做,之后还得复制一遍,是牺牲速度换不闪。而硬件加速时CPU和GPU是并行的。CPU只是发送绘制命令给GPU,GPU渲染,CPU接着做别的事,GPU画完了就交换缓冲区(现在一般都需要复制,只有独占全屏模式才能直接交换指针)。

另外,之所以有硬件加速,是因为硬件远快于软件渲染,至少是CPU处理的10倍,高的有数千倍。当你的CPU alpha混合一个像素的时候,你的显卡在同时混合100个像素,而且还是和CPU并行的。GPU也叫VPU,即向量处理单元,而CPU则擅长标量和控制逻辑。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-19 19:50

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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