zoukankan      html  css  js  c++  java
  • directdraw overlay 和flip及blt的区别

    (1)为什么需要overlay:

      overlay产生的原因是:

    1,避免在vertical blank时flip/blt surface造成的画面"撕 裂"现象;

    2,使硬件可以窗口模式下使用flip而不是blt,从而提高效率. 3D游戏里面它没有什么用的上的地方, 因为一般硬件不支持 render to overlay surface, 2D游戏一般也不用它, 因为象素格式问题, 从RGB的surface blt到YUV的 surface时需要硬件花时间去转换, 除非游戏里所有的其他surface也用YUV.

    注: 一般硬件overlay surface只支持YUV和其他一些FOURCC的格式, RGB的一般不支持.

    "倘若要将一种YUV格式的图象覆盖显示到一个自定义的窗口", 做到这个很容易的, 只需要创建一个和自定义窗口大小和位置都相同的overlay surface即可, 窗口的大小位置改变时, 此overlay也跟着改变. 一般视频播放软件就是这么做的.
    但overlay是比较宝贵的资源, 如果仅仅是为了画一个如"动画按钮"之类的东西就用它也太浪费了点, 一般的硬件只能同时显示一个overlay surface, 多了也没必要.

    (2)DirectDraw里面PrimarySurface的Blt方法和Flip方法有什么区别呢?

    blt 可以用于大小不相同的表面,可以使用 color key 等等。blt 是将一个表面的内容复制到另一个表面,相当与 memcpy,当然显卡可能有硬件加速。

    flip 只是交换了了指针,将当前显示表面的指针指向flip链中的下一个表面。对于更新主显示表面来说,flip应该比 blt要快。

    Blt适合全屏和窗口, Flip只能用全屏。

    bltfast是在不需要做图象翻转,放大,缩小时用的,据说,比blt快10%。
    flip 就是换页。
    blt和bltfast适合窗口和全屏。
    flip 必须在全屏下使用。
    如果,你做的是全屏游戏推荐用flip。 是基于窗口的游戏推荐bltfast。


    其实这非常简单。创建两个表面,一个是主表面,一个是离屏表面(后台)。在表面上进行Blt。完了之后,用Flip翻转到前台。然后继续在后台表面画图。接着再翻转。如此一直进行下去就OK了。

    不过Flip只在全屏下有效,而如果你采用Clipper来剪切屏幕的话,就无法进行BltFast操作。所以建议自己编程进行剪切.

    原文链接:https://www.cnblogs.com/azraelly/archive/2013/01/13/2858850.html

  • 相关阅读:
    Servlet学习总结,为理解SpringMVC底层做准备
    maven笔记
    初识Hadoop
    java8笔记: sorted()之正序倒序
    git push命令
    git clone新项目后如何拉取其他分支代码到本地
    Spring事务
    线程之间的转化状态
    Centos安装RabbitMq
    .net 中的AES加密解密
  • 原文地址:https://www.cnblogs.com/springlight/p/13297324.html
Copyright © 2011-2022 走看看