Direct2D简介(原ZDD)


1.Direct2D是什么?

Direct2D是一套高性能的硬件加速API(代码运行在GPU),用于渲染几何图形,图片和文本,并且可以与Direct3D,GDI,GDI+交互。

简而言之是一个2D图形API,可以提供高性能,高质量的2D渲染。在过去,3D世界是OpenGL与DirectX二分天下,但是由于OpenGL发展十分滞后,而且没有一个像微软这样强大的后台支柱,所以逐渐被DirectX所超越。回过头来说2D,过去Windows上的2D程序还主要基于GDI和GDI+,遗憾的是这两者都是软件实现,而Direct2D则不同,它基于Direct3D,所以能够使用硬件加速(通俗的理解:

硬件加速是用显卡的GPU解码视频,几乎不占用CPU,在播放高清视频时如果你的CPU不给力就会卡,不卡也会占用率很高,开启硬件加速就是让显卡分担了CPU的解码工作,所以你可以再开别的程序也不会卡
)功能,能更大程度的发挥硬件特性,创建高性能,高质量的2D图形,这些图形包括几何图形,如矩形,椭圆等。还有位图,文本。而且更方便的是,Direct2D与GDI,GDI+和D3D都是可以交互的。

2Direct2D使用人员:

Direct2D 主要供以下几类开发人员使用:

    • 大型企业级本机应用程序开发人员。
    • 创建供下游开发人员使用的控件工具包和库的开发人员。
    • 需要对二维图形进行服务器端呈现的开发人员。
    • 使用 Direct3D 图形,并且需要在菜单、用户界面 (UI) 元素和抬头显示器 (HUD) 中使用高性能的简单二维和文本呈现的开发人员。

 

3D2D的架构:


Direct2D是基于Direct3D 10.1 API构建的,由上图可以看出,Direct2D还自带了一个软件实现(Software rasterizer),这是因为如果显卡不支持硬件加速,那么Direct2D可以使用软件方式渲染,即使这样,效果还是要优于GDI的。上图中在Direct3D下面还有一个层叫DXGI,其全称是:DirectX Graphics(图像,图形) Infrastructure(基础设施),DXGI从Direct3D 10中才开始存在,主要是为了将一些与3D图形无关的工作从原本的runtime中分离处理,这些工作多是一些底层的操作,比如枚举设备,显示帧缓冲,gamma控制,管理全屏等,在Direct3D 10以前的版本中,这些操作全部集成到了Direct3D的API中,现在分离处理单独成为一个component,就是DXGI。

补:  什么是runtime:runtime就是程序运行时的状态
还有一个compiletime,就是编译时代状态
程序设计中要避免runtime的错误,compiletime的错误由编译器检测。

运行时rumtime就是程序运行的时候

运行时库就是程序运行的时候所需要依赖的库。

运行的时候指的是指令加载到内存并由CPU执行的时候。
C代码编译成可执行文件的时候,指令没有被CPU执行,这个时候算是编译时,就是编译的时候
4交互性

 
D2D如果要输出文字,可以使用是DirectWrite。
如果要输出图片,可以使用WIC(Windows Image Compennet)。
几何图形自己可以直接输出。
 


### Redis ZSET 操作与使用教程 #### 1. 添加元素到有序集合 可以使用 `ZADD` 命令向有序集合中添加一个或多个成员及其分数。如果某个成员已经存在,则更新其分数。 ```bash redis> ZADD myzset 1 "one" (integer) 1 redis> ZADD myzset 2 "two" 3 "three" (integer) 2 ``` 此命令支持一次添加多个元素[^5]。 #### 2. 获取指定范围内的成员 利用 `ZRANGE` 和 `ZREVRANGE` 可以获取按分数从小到大排列的前 n 名成员,或者从高分往低分取数据: ```bash redis> ZRANGE myzset 0 -1 WITHSCORES 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" redis> ZREVRANGE myzset 0 -1 WITHSCORES 1) "three" 2) "3" 3) "two" 4) "2" 5) "one" 6) "1" ``` 上述命令中的 `-1` 表示返回所有匹配项;而 `WITHSCORES` 参数用于显示每条记录对应的权重值[^3]。 #### 3. 计算给定分数区间的成员数 借助 `ZCOUNT` 来统计某范围内(含边界)有多少个不同的键值对存在于该集合里: ```bash redis> ZCOUNT myzset 1 3 (integer) 3 ``` 当需要排除端点时可以在参数前面加上括号 `( )` ,比如查询大于等于 1 小于 3 的数目可写成如下形式: ```bash redis> ZCOUNT myzset (1 3 (integer) 2 ``` 对于严格小于的情况则应写作 `(1 (` 或者更简洁的形式 `(1 (3` : ```bash redis> ZCOUNT myzset (1 (3 (integer) 1 ``` 这里需要注意的是,在定义区间的时候可以通过加减无穷大来代表整个实数轴上的任意位置,例如 `(-inf +inf)` 即涵盖了所有的可能情况。 #### 4. 删除特定条件下的成员 要移除符合条件的某些项目,可以用 `ZREM` 方法完成这一任务: ```bash redis> ZREM myzset two three (integer) 2 ``` 这将会把名为 “two” 和 ”three”的两个成员连同它们各自的得分一起清除掉。 #### 5. 数据结构转换机制 随着有序集合同步增长至一定规模之后,为了保持高效的读写速度,内部实现会自动由最初的简单列表转变为更加复杂的跳跃表(skiplist),从而确保各项基本操作的时间复杂度维持在 O(logN)[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值