Bootstrap

003:D2D 性能测试-绘制不同对象的帧率变化

前言:

       D2D性能测试,目的是了解D2D特性,为后续系统设计确定技术路线。主要对D2D绘制不同对方的速度进行测试,测试的对象包括:图像、文本、椭圆和矩形,测试绘制不同对象对帧率的影响。测试结果表明:以帧率下降速度最快排列,绘制文本帧率下降最快,其次是椭圆、矩形,影响最小的是图像。

       探讨了提高文本绘制的方法:采用CBitmapRenderTarget,类似于一个位图缓冲区,现在里面进行绘制,然后再纹理贴图的方式显示在屏幕上,速度飞起,但如果窗口大小经常变动或文字内容经常更改,则改方法存在一定的弊端。

一、绘制图像

     从硬盘读取一张JPG图像到CD2DBitmap(数据由硬盘,读取内存,在以纹理的方式存储到GPU的显存中,瓶颈在于图像的读取;另外是否要对图像进行修改也是需要考虑的,如果类似DICOM这样,需要调整窗宽窗位,频繁的修改图像,则图像在CPU端的修改,及内存到显存的传输是影像性能的关键),然后显示在窗口中,拖动窗口进行重新绘制,测试对帧率的影像,途中下方输出是绘制的帧率,可以看到对帧率基本没有影响。分析CD2DBitmap应该是以纹理的方式存在于GPU端,绘制的过程就等同于进行纹理贴图进,因此不会对帧率有什么影响。

 二、绘制矩形

       鼠标每单击窗口一次,在该位置绘制一个矩形,随着点击次数的增加,绘制帧率有所下降,但并不明显。每绘制一次,都需要传输矩形参数到GPU端。

三、绘制圆

        鼠标每单击窗口一次,在该位置绘制一个圆,随着点击次数的增加,绘制帧率有所下降,但并不明显。每绘制一次,都需要传输矩形参数到GPU端。

四、绘制文本

      鼠标每单击窗口一次,在该位置绘制文本“你好 Direct 2d !”,随着点击次数的增加,绘制帧率急剧下降,由原来的2万多,下降到200左右。

五、采用 CBitmapRenderTarget 方法

        随机在窗口中绘制1000条“你好 Direct 2D!”,并测试帧率。过程:将需要绘制的文本,先绘制到 CBitmapRenderTarget 上,然后创建 CD2DBitmapBrush 画笔,在窗口中用该画笔绘制,帧率飞起。原因:CBitmapRenderTarget 应该对应一个显存中的缓冲区,在上面绘制需要显示的内容,而创建 CD2DBitmapBrush 画笔的过程,应该就是将其转为纹理对象,最后指定绘制区域,对应纹理贴图的位置。因此其速度是最快的。

 六、总结

        CBitmapRenderTarget 方法是最优的方案,但具体的实现会涉及过多的细节,后续扔需要进行测试。

;