gdi
原理对比:
GDI和DX在原理和框架设计上是完全不同的,有几个重要的方面决定了它们是没法结合。
1.现代的2D库(包括GDI)都基于画布来操作,或者叫位图区域,而3D库的操作对象只是场景和3D物体,没有画布概念,你在显示器上看到的只是渲染流水线中的最后一个环节(光栅化)而已。
2.计算单元的设计理念不同。cpu是通用指令,能干所有事,包括3D运算,只是效率低而已;GPU只有有限的专用指令,它的目的是通过并行方式执行大量的重复运算,且浮点运算是强项,在像素运算效率上比CPU高几个数量级,但它并不通用。
3.动态计算。2D运算中有大量的文字字型生成、图像特效计算过程,这些动态计算只能由CPU承担,硬件能加速的部分只局限于图像的混合,换句话说,只有静态图像数据才能硬件加速。MMX指令虽然能起到加速作用,但性能提升幅度相比GPU来说简直不值一提。
4.内存。GPU运算只能在显存中进行,CPU运算只能在系统内存中进行,当两种内存的数据需要互相传输时,内存间的IO次数和传输量必须严格控制,过大的数据吞吐将严重影响硬件加速性能。对于3D应用来说,CPU的功能通常是构造并传递流水线指令、加载各种静态图片(纹理)、响应键盘鼠标游戏外设消息,这里面数据吞吐量最大的就是图片,游戏中通常在关口开始阶段就把所有纹理一次性加载到显存,而且在运行过程中很少或者几乎没有动态计算过程(比如文字处理)。
从上面可以看出,GDI/DX的差别到底有多大,为什么UI系统和游戏很少被融合,因为需求不同,尤其是第三点,UI中需要大量的动态计算,游戏恰好相反,必须尽可能减少动态计算。不是想融合就能融合的。
CPU与Gpu GDI与OpenGL与DirectX之间的区别
总结:从总体上来说,dx和gdi设计的出发点不同,dx主要是为gpu来设计的,他需要强烈的硬件支持,并且,它非常针对游戏设计,因为游戏和普通的2d客户端对于CPU来说的计算量差异很大,所以,游戏一方面需要硬件支持,另外又符合某种(如显卡)所擅长的计算模式;而gdi是为广谱设计的,2d客户端可以用,游戏也可用,只不过游戏运行起来会很卡,因为cpu不适应游戏场景这种计算,gdi没有充分利用gpu,于是有了dx。
dx需要相应的软件和硬件来支持,否则不能运行,而gdi则兼容绝大部分硬件,我所知道的还没有不支持gdi操作的,即使是没有安装显卡驱动,一样可以输出图形,这可以在未安装显卡驱动的显示器上看到;
dx在用户模式下分解绘图操作,从而直接交给gpu去绘制,这样,gpu不能踢回(踢回见windows图形编程一书第二章)dx传过来的绘制操作,因为事前已经确定好显卡驱动可以做哪些绘制了;而gdi则是以商量的形式和显卡驱动交互,显卡驱动在繁忙的时候可以踢回gre(同见windows图形编程)发送的请求,有gre来分解gdi绘图操作。
最后,就目前来说,gdi的一些底层实现,已经慢慢转向dx来加速了,所以二者的交集也在越来越大。
相关阅读
从今天开始,开启一个新的系列:Direct3D11的学习教程。因为一直对3D方面比较感兴趣,最近决定开始学习D3D知识。我之前也没有接触过Dir
最后更新:2019-9-5 For English version, please refer to the bottom of this page. DirectX修复工具最新版:DirectX Repair V3.9
最后更新于2019-7-28 大家好,即日起发布DirectX修复工具V3.9版的最后一个公测版(版本号V3.8.8特别版),正式版预计于近日内发布,尽情期
原文地址为:DirectX11 SDK下载地址: DirectX 11 SDK下载地址: http://download.microsoft.com/download/F/1/7/F178BCE4-FA1
DirectX11 With Windows SDK--17 利用几何着色器实现
文章目录前言实现雾效HLSL代码树的公告板效果HLSL代码图元ID顶点IDAlpha-To-CoverageBasicEffect的变化BasicEffect::SetRenderBi