培训
认证
Microsoft Certified: Azure Virtual Desktop Specialty - Certifications
在 Microsoft Azure 上为任何设备计划、交付、管理和监视虚拟桌面体验和远程应用。
本文档专门引用 DirectX 图形的 Windows Vista 扩展。 若要开发适用于 Windows Vista 的 DirectX 功能,必须安装 Windows Vista SDK 和 DirectX SDK。 使用 DirectX for Windows Vista 的应用程序必须使用使用 WDDM 驱动程序 (Windows 设备驱动程序模型) 的硬件,而不是 XPDM (XP Driver Model) ;未实现 WDDM 的驱动程序无法实例化 Windows Vista DirectX 图形接口。
在以下部分之一中了解 Windows Vista 中的新 DirectX 图形功能:
设备现在仅在两种情况下丢失:硬件因挂起而重置时,以及设备驱动程序停止时。 当硬件挂起时,可以通过调用 ResetEx 来重置设备。 如果硬件挂起,纹理内存将丢失。
停止驱动程序后,必须重新创建 IDirect9Ex 对象才能继续呈现。
当演示区域被窗口模式中的另一个窗口遮盖时,或者当全屏应用程序最小化时, PresentEx 将返回S_D3DPRESENTATIONOCCLUDED。 全屏应用程序在收到 WM_ACTIVATEAPP 回调消息时可以恢复呈现。
在早期版本的 DirectX 中,当应用程序遇到模式更改时,恢复的唯一方法是重置设备并重新创建所有视频内存资源和交换链。 现在,使用 DirectX for Windows Vista 时,在模式更改后调用 Reset 不会导致纹理内存表面、纹理和状态信息丢失,并且无需重新创建这些资源。
添加了新的 caps 位 (D3DCREATE_DISABLE_PSGP_THREADING) ,它将禁用软件顶点处理 (swvp) 的多线程处理。 使用此宏为 IDirect3D9::CreateDevice 生成行为标志。
#define D3DCREATE_DISABLE_PSGP_THREADING
有一种新的一位图面格式类型,对于处理文本字形特别有用。 新格式称为 D3DFMT_A1。 一位图面设计为用作每像素纹理,或者用作 ComposeRects 或 ColorFill 生成的呈现目标输出。 图面宽度和高度没有单独的盖帽;实现必须支持 2K 纹素 x 8K 纹素的单一尺寸图面。
一位图面每个纹素有一位;因此,一个表示 (r,g,b,一个像素) 的所有分量都为 1,零表示所有分量都等于 0。 可以将一位图面与以下 API 配合使用:ColorFill、UpdateSurface 和 UpdateTexture。
读取一位图面时,运行时可以执行点采样或卷积筛选。 卷积筛选器可调整 (请参阅 SetConvolutionMonoKernel) 。
一位图面存在一些限制:
使用 IDirect3DDevice9::UpdateSurface 读取或写入从 IDirect3DDevice9::CreateDepthStencilSurface 或 IDirect3DDevice9::GetDepthStencilSurface 获取的表面的深度/模具数据。
首先,使用 IDirect3DDevice9::CreateOffscreenPlainSurface 创建可锁定的、仅深度或仅模具的表面。 使用以下格式之一:
其次,在深度/模具缓冲区和新创建的可锁定深度或模具表面之间传输数据。 传输使用 IDirect3DDevice9::UpdateSurface 执行。
当两个图面都是 LOCKABLE 格式或两者都不可锁定时,UpdateSurface 将失败。
传输不存在的数据将导致错误 (例如,从不可锁定的仅深度图面传输到) D3DFMT_S8_LOCKABLE图面。
IDirect3DDevice9::UpdateSurface 的其余限制仍适用。
Direct3D 资源现在可以在设备或进程之间共享。 这适用于任何 Direct3D 资源,包括纹理、顶点缓冲区、索引缓冲区或表面 (,例如呈现目标、深度模具缓冲区或屏幕外普通表面) 。 若要共享,需要在创建时指定用于共享的资源,并在默认池 (D3DPOOL_DEFAULT) 中找到该资源。 创建用于共享的资源后,可以在进程中的设备之间共享,也可以跨进程共享。
若要启用共享资源,资源创建 API 具有额外的句柄参数。 这是指向共享资源的 HANDLE。 在 DirectX 的先前修订中,此参数是 API 签名的一部分,但未使用,必须设置为 NULL。 从 Windows Vista 开始,通过以下方式使用 pSharedHandle:
资源创建 API 包括 - CreateTexture、 CreateVolumeTexture、 CreateCubeTexture、 CreateRenderTarget、 CreateVertexBuffer、 CreateIndexBuffer、 CreateDepthStencilSurface、 CreateOffscreenPlainSurface、 CreateDepthStencilSurfaceEx、 CreateOffscreenPlainSurfaceEx 和 CreateRenderTargetEx。
使用共享资源存在一些限制。 其中包括:
现在可以检查以查看设备是否可以在帧缓冲区混合之前将管道数据转换为 sRGB。 这意味着设备从 sRGB 转换呈现目标值。 若要查看硬件是否支持转换,检查此上限:
D3DPMISCCAPS_POSTBLENDSRGBCONVERT
此上限标识在混合之前支持转换为 sRGB 的硬件。 此功能对于从桌面窗口管理器中的 fp16 帧缓冲区 (DWM) 进行高质量渲染非常重要。
在早期版本的 DirectX 中,StretchRect 具有许多限制来容纳不同的驱动程序 (请参阅 IDirect3DDevice9::StretchRect) 。 Windows Vista 基于 Windows 设备驱动程序模型 (WDDM) 构建。 这种新的驱动程序模型更加可靠,并且允许驱动程序处理硬件中的特殊情况。
一般情况下,唯一的剩余限制是,呈现器目标必须已使用呈现器目标使用 (D3DUSAGE_RENDERTARGET) 创建。 如果执行简单复制 (源和 dest 的格式相同、大小相同且) 没有子矩形,则会解除此限制。
在系统内存的使用、分配和删除方面需要更多灵活性的应用程序现在可以从系统内存指针创建纹理。 例如,应用程序可以从 GDI 系统内存位图指针创建 Direct3D 纹理。
需要执行两项操作才能创建此类纹理:
下面是 IDirect3DDevice9::CreateTexture 的函数原型:
STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels,
DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture,
HANDLE* pSharedHandle)
系统内存纹理具有以下限制:
培训
认证
Microsoft Certified: Azure Virtual Desktop Specialty - Certifications
在 Microsoft Azure 上为任何设备计划、交付、管理和监视虚拟桌面体验和远程应用。