DX11写字体用三种方法,GDI,D2D,Directx write
这里介绍D2D 因为DX11是不能使用D2D的(这里我也不知道为什么)
但我们可以通过一个sharing surface 的概念,先用DX10.1来使用D2D,把渲染目标分享,再用DX11来渲染
Step1:先通过IDXGIFactory1 接口来设置一个容器
创建10.1设备和11的设备
创建贴图,必须是BGRA格式
创建D3D11 KeyedMutex(为了10.1和11设备都能使用贴图,相当于一个互斥锁)
这个锁有两个功能,一个是获得,一个是释放(保证两个设备知道彼此什么时候在用贴图)
因为10.1设备不能直接创建一个贴图的互斥锁,所以我们用11来创建,然后创建一个shared resource Object(有些专业概念我也不知道怎么翻译,就直接拿来用吧),这个object是存储一个指向贴图的指针
创建一个IDXGISurface1 object指向刚才的shared resource Object。(这个surface是用来获得互斥锁的)
初始化D2D
先设置D2D的属性,然后创建D2D Render Target,就是上面的surface
通过CreateDxgiSurfaceRenderTarget() 得到D2D的render target object(这个在下面会用的到)
用上一行得到的Object创建一个画刷(这样才能在屏幕上写字)( CreateSolidColorBrush() method of the ID2D1RenderTarget interface)
初始化DirectxWrite(用来渲染文字,感觉好多功能都是类似的,可能还是我理解不到位)
要创建DW,和其他一样要先创建Blahblah一堆
设置DW的文本格式和对准(具体的函数这里就不列出来了,要学习的朋友们去我贴出来的网页看吧)
Step2:
创建shader resource(和上面提到的不是一个东西),这个是用来做纹理贴图的
(可以把D2D当成是一个画家工具包,把DW当成是一个画家)