Freigeben über


Zuordnen von DirectX 9-Features zu DirectX 11-APIs

Verstehen, wie die von Ihrem Direct3D 9-Spiel verwendeten Features in Direct3D 11 und die Universelle Windows-Plattform (UWP) übersetzt werden.

Siehe auch "Planen Des DirectX-Ports" und "Wichtige Änderungen von Direct3D 9" zu "Direct3D 11".

Zuordnen von Direct3D 9 zu DirectX 11-APIs

Direct3D ist weiterhin die Grundlage für DirectX-Grafiken, aber die API hat sich seit DirectX 9 geändert:

  • Microsoft DirectX Graphics Infrastructure (DXGI) wird zum Einrichten von Grafikkarten verwendet. Verwenden Sie DXGI , um Pufferformate auszuwählen, Swapchains zu erstellen, Frames darzustellen und freigegebene Ressourcen zu erstellen. Siehe DXGI Overview.
  • Ein Direct3D-Gerätekontext wird verwendet, um den Pipelinestatus festzulegen und Renderingbefehle zu generieren. Die meisten unserer Beispiele verwenden einen unmittelbaren Kontext, um direkt auf dem Gerät zu rendern; Direct3D 11 unterstützt auch Multithread-Rendering, in diesem Fall werden verzögerte Kontexte verwendet. Siehe Einführung in ein Gerät in Direct3D 11.
  • Einige Features sind veraltet, insbesondere die Pipeline für feste Funktionen. Siehe veraltete Features.

Eine vollständige Liste der Direct3D 11-Features finden Sie unter Direct3D 11-Features und Direct3D 11-Features.

Wechseln von Direct2D 9 zu Direct2D 11

Direct2D (Windows) ist weiterhin ein wichtiger Bestandteil von DirectX-Grafiken und Windows. Sie können Direct2D weiterhin verwenden, um 2D-Spiele zu zeichnen und Überlagerungen (HUDs) über Direct3D zu zeichnen.

Direct2D wird über Direct3D ausgeführt; 2D-Spiele können mithilfe einer der beiden APIs implementiert werden. Ein mit Direct3D implementiertes 2D-Spiel kann z. B. die orthografische Projektion verwenden, Z-Werte festlegen, um die Zeichnungsreihenfolge von Grundtypen zu steuern und Pixelshader zum Hinzufügen von Spezialeffekten zu verwenden.

Da Direct2D auf Direct3D basiert, verwendet es auch DXGI- und Gerätekontexte. Siehe Übersicht über die Direct2D-API.

Die DirectWrite-API bietet Unterstützung für formatierten Text mit Direct2D. Siehe Einführung in DirectWrite.

Ersetzen veralteter Hilfsbibliotheken

D3DX und DXUT sind veraltet und können nicht von UWP-Spielen verwendet werden. Diese Hilfsbibliotheken haben Ressourcen für Aufgaben wie das Laden von Texturen und das Laden von Gittern bereitgestellt.

Verschieben von Shaderprogrammen von FX auf HLSL

Die Hilfsprogrammbibliothek D3DX (D3DX 9, D3DX 10 und D3DX 11), einschließlich Effects, ist für UWP veraltet. Alle DirectX-Spiele für UWP steuern die Grafikpipeline mit HLSL ohne Effekte.

Visual Studio verwendet FXC weiterhin unter der Haube, um Shaderobjekte zu kompilieren. UWP-Game-Shader werden vorab kompiliert. Der Bytecode wird zur Laufzeit geladen, dann wird jede Shaderressource während des entsprechenden Renderingdurchlaufs an die Grafikpipeline gebunden. Shader sollten in eigene separate Shader verschoben werden. HLSL-Dateien und Renderingtechniken sollten in Ihrem C++-Code implementiert werden.

Einen schnellen Blick auf das Laden von Shaderressourcen finden Sie unter "Einfacher Port von Direct3D 9 zu UWP".

Direct3D 11 hat Shadermodell 5 eingeführt, das die Direct3D-Featureebene 11_0 (oder höher) erfordert. Siehe HLSL-Shadermodell 5-Features für Direct3D 11.

Ersetzen von XNAMath und D3DXMath

Code mit XNAMath (oder D3DXMath) sollte zu DirectXMath migriert werden. DirectXMath enthält Typen, die über x86, x64 und Arm portierbar sind. Siehe Codemigration aus der XNA Math Library.

Beachten Sie, dass DirectXMath-Float-Typen für die Verwendung mit Shadern geeignet sind. Beispielsweise XMFLOAT4 und XMFLOAT4X4 Daten für Konstantenpuffer bequem ausrichten.

Ersetzen von DirectSound durch XAudio2 (und Hintergrundaudio)

DirectSound wird für UWP nicht unterstützt:

  • Verwenden Sie XAudio2 , um Ihrem Spiel Soundeffekte hinzuzufügen.

Ersetzen von DirectInput durch XInput- und Windows-Runtime-APIs

DirectInput wird für UWP nicht unterstützt:

  • Verwenden Sie CoreWindow-Eingabeereignisrückrufe für Maus-, Tastatur- und Toucheingaben.
  • Verwenden Sie XInput 1.4 für die Unterstützung von Gamecontrollern (und gamecontroller Kopfhörer Unterstützung). Wenn Sie eine freigegebene Codebasis für Desktop und UWP verwenden, finden Sie informationen zur Abwärtskompatibilität unter XInput-Versionen .
  • Registrieren Sie sich für EdgeGesture-Ereignisse , wenn Ihr Spiel die App-Leiste verwenden muss.

Verwenden von Microsoft Media Foundation anstelle von DirectShow

DirectShow ist nicht mehr Teil der DirectX-API (oder der Windows-API). Microsoft Media Foundation stellt Videoinhalte mithilfe von freigegebenen Oberflächen für Direct3D bereit. Siehe Direct3D 11-Video-APIs.

Ersetzen von DirectPlay durch Netzwerkcode

Microsoft DirectPlay ist veraltet. Wenn Ihr Spiel Netzwerkdienste verwendet, müssen Sie Netzwerkcode bereitstellen, der den UWP-Anforderungen entspricht. Verwenden Sie die folgenden APIs:

In den folgenden Artikeln können Sie Netzwerkfeatures hinzufügen und Unterstützung für Netzwerke im App-Paketmanifest deklarieren.

Beachten Sie, dass alle UWP-Apps (einschließlich Spielen) bestimmte Arten von Hintergrundaufgaben verwenden, um die Konnektivität aufrechtzuerhalten, während die App angehalten wird. Wenn Ihr Spiel den Verbindungsstatus beibehalten muss, während die Netzwerkgrundlagen angehalten werden.

Funktionszuordnung

Verwenden Sie die folgende Tabelle, um Code aus Direct3D 9 in Direct3D 11 zu konvertieren. Dies kann auch dabei helfen, zwischen dem Gerät und dem Gerätekontext zu unterscheiden.

Direct3D9 Direct3D 11-Entsprechung

IDirect3DDevice9

ID3D11Device2

ID3D11DeviceContext2

Die Grafikpipelinephasen werden in der Grafikpipeline beschrieben.

IDirect3D9

IDXGIFactory2

IDXGIAdapter2

IDXGIDevice3

IDirect3DDevice9::P resent

IDXGISwapChain1::P resent1

IDirect3DDevice9::TestCooperativeLevel

Call IDXGISwapChain1::P resent1 with the DXGI_PRESENT_TEST flag set.

IDirect3DBaseTexture9

IDirect3DTexture9

IDirect3DCubeTexture9

IDirect3DVolumeTexture9

IDirect3DIndexBuffer9

IDirect3DVertexBuffer9

ID3D11Buffer

ID3D11Texture1D

ID3D11Texture2D

ID3D11Texture3D

ID3D11ShaderResourceView

ID3D11RenderTargetView

ID3D11DepthStencilView

IDirect3DVertexShader9

IDirect3DPixelShader9

ID3D11VertexShader

ID3D11PixelShader

IDirect3DVertexDeclaration9

ID3D11InputLayout

IDirect3DDevice9::SetRenderState

IDirect3DDevice9::SetSamplerState

ID3D11BlendState1

ID3D11DepthStencilState

ID3D11RasterizerState1

ID3D11SamplerState

IDirect3DDevice9::D rawIndexedPrimitive

IDirect3DDevice9::D rawPrimitive

ID3D11DeviceContext::Draw

ID3D11DeviceContext::DrawIndexed

ID3D11DeviceContext::DrawIndexedInstanced

ID3D11DeviceContext::DrawInstanced

ID3D11DeviceContext::IASetPrimitiveTopology

ID3D11DeviceContext::DrawAuto

IDirect3DDevice9::BeginScene

IDirect3DDevice9::EndScene

IDirect3DDevice9::D rawPrimitiveUP

IDirect3DDevice9::D rawIndexedPrimitiveUP

Keine direkte Entsprechung

IDirect3DDevice9::ShowCursor

IDirect3DDevice9::SetCursorPosition

IDirect3DDevice9::SetCursorProperties

Verwenden Sie Standardcursor-APIs.

IDirect3DDevice9::Reset

VERLORENes Gerät und POOL_MANAGED nicht mehr vorhanden. IDXGISwapChain1::P resent1 kann mit einem DXGI_ERROR_DEVICE_REMOVED Rückgabewert fehlschlagen.

IDirect3DDevice9:DrawRectPatch

IDirect3DDevice9:DrawTriPatch

IDirect3DDevice9:LightEnable

IDirect3DDevice9:MultiplizierenTransform

IDirect3DDevice9:SetLight

IDirect3DDevice9:SetMaterial

IDirect3DDevice9:SetNPatchMode

IDirect3DDevice9:SetTransform

IDirect3DDevice9:SetFVF

IDirect3DDevice9:SetTextureStageState

Die Pipeline mit fester Funktion ist veraltet.

IDirect3DDevice9:CheckDepthStencilMatch

IDirect3DDevice9:CheckDeviceFormat

IDirect3DDevice9:GetDeviceCaps

IDirect3DDevice9:ValidateDevice

Funktionsbits werden durch Featureebenen ersetzt. Nur wenige Format- und Featureverwendungsfälle sind für eine bestimmte Featureebene optional. Diese können mit ID3D11Device::CheckFeatureSupport und ID3D11Device::CheckFormatSupport überprüft werden.

Surface-Formatzuordnung

Verwenden Sie die folgende Tabelle, um Direct3D 9-Formate in DXGI-Formate zu konvertieren.

Direct3D 9-Format Direct3D 11-Format

D3DFMT_UNKNOWN

DXGI_FORMAT_UNKNOWN

D3DFMT_R8G8B8

Nicht verfügbar

D3DFMT_A8R8G8B8

DXGI_FORMAT_B8G8R8A8_UNORM

DXGI_FORMAT_B8G8R8A8_UNORM_SRGB

D3DFMT_X8R8G8B8

DXGI_FORMAT_B8G8R8X8_UNORM

DXGI_FORMAT_B8G8R8X8_UNORM_SRGB

D3DFMT_R5G6B5

DXGI_FORMAT_B5G6R5_UNORM

D3DFMT_X1R5G5B5

Nicht verfügbar

D3DFMT_A1R5G5B5

DXGI_FORMAT_B5G5R5A1_UNORM

D3DFMT_A4R4G4B4

DXGI_FORMAT_B4G4R4A4_UNORM

D3DFMT_R3G3B2

Nicht verfügbar

D3DFMT_A8

DXGI_FORMAT_A8_UNORM

D3DFMT_A8R3G3B2

Nicht verfügbar

D3DFMT_X4R4G4B4

Nicht verfügbar

D3DFMT_A2B10G10R10

DXGI_FORMAT_R10G10B10A2

D3DFMT_A8B8G8R8

DXGI_FORMAT_R8G8B8A8_UNORM

DXGI_FORMAT_R8G8B8A8_UNORM_SRGB

D3DFMT_X8B8G8R8

Nicht verfügbar

D3DFMT_G16R16

DXGI_FORMAT_R16G16_UNORM

D3DFMT_A2R10G10B10

Nicht verfügbar

D3DFMT_A16B16G16R16

DXGI_FORMAT_R16G16B16A16_UNORM

D3DFMT_A8P8

Nicht verfügbar

D3DFMT_P8

Nicht verfügbar

D3DFMT_L8

DXGI_FORMAT_R8_UNORM

Hinweis: Verwenden Sie ".r swizzle" im Shader, um Rot in andere Komponenten zu duplizieren, um das Direct3D 9-Verhalten zu erhalten.
 

D3DFMT_A8L8

DXGI_FORMAT_R8G8_UNORM

Hinweis : Verwenden Sie swizzle .rrrg im Shader, um Rot zu duplizieren und Grün zu den Alphakomponenten zu verschieben, um Direct3D 9-Verhalten zu erhalten.
 

D3DFMT_A4L4

Nicht verfügbar

D3DFMT_V8U8

DXGI_FORMAT_R8G8_SNORM

D3DFMT_L6V5U5

Nicht verfügbar

D3DFMT_X8L8V8U8

Nicht verfügbar

D3DFMT_Q8W8V8U8

DXGI_FORMAT_R8G8B8A8_SNORM

D3DFMT_V16U16

DXGI_FORMAT_R16G16_SNORM

D3DFMT_W11V11U10

Nicht verfügbar

D3DFMT_A2W10V10U10

Nicht verfügbar

D3DFMT_UYVY

Nicht verfügbar

D3DFMT_R8G8_B8G8

DXGI_FORMAT_G8R8_G8B8_UNORM

Hinweis In Direct3D 9 wurden die Daten um 255,0f skaliert, dies kann jedoch im Shader behandelt werden.
 

D3DFMT_YUY2

Nicht verfügbar

D3DFMT_G8R8_G8B8

DXGI_FORMAT_R8G8_B8G8_UNORM

Hinweis In Direct3D 9 wurden die Daten um 255,0f skaliert, dies kann jedoch im Shader behandelt werden.
 

D3DFMT_DXT1

DXGI_FORMAT_BC1_UNORM & DXGI_FORMAT_BC1_UNORM_SRGB

D3DFMT_DXT2

DXGI_FORMAT_BC1_UNORM & DXGI_FORMAT_BC1_UNORM_SRGB

Note DXT1 and DXT2 are the same from an API/hardware perspective. Der einzige Unterschied besteht darin, ob prämultipliziertes Alpha verwendet wird, das von einer Anwendung nachverfolgt werden kann und kein separates Format benötigt.
 

D3DFMT_DXT3

DXGI_FORMAT_BC2_UNORM & DXGI_FORMAT_BC2_UNORM_SRGB

D3DFMT_DXT4

DXGI_FORMAT_BC2_UNORM & DXGI_FORMAT_BC2_UNORM_SRGB

Note DXT3 and DXT4 are the same from an API/hardware perspective. Der einzige Unterschied besteht darin, ob prämultipliziertes Alpha verwendet wird, das von einer Anwendung nachverfolgt werden kann und kein separates Format benötigt.
 

D3DFMT_DXT5

DXGI_FORMAT_BC3_UNORM & DXGI_FORMAT_BC3_UNORM_SRGB

D3DFMT_D16 & D3DFMT_D16_LOCKABLE

DXGI_FORMAT_D16_UNORM

D3DFMT_D32

Nicht verfügbar

D3DFMT_D15S1

Nicht verfügbar

D3DFMT_D24S8

Nicht verfügbar

D3DFMT_D24X8

Nicht verfügbar

D3DFMT_D24X4S4

Nicht verfügbar

D3DFMT_D16

DXGI_FORMAT_D16_UNORM

D3DFMT_D32F_LOCKABLE

DXGI_FORMAT_D32_FLOAT

D3DFMT_D24FS8

Nicht verfügbar

D3DFMT_S1D15

Nicht verfügbar

D3DFMT_S8D24

DXGI_FORMAT_D24_UNORM_S8_UINT

D3DFMT_X8D24

Nicht verfügbar

D3DFMT_X4S4D24

Nicht verfügbar

D3DFMT_L16

DXGI_FORMAT_R16_UNORM

Hinweis: Verwenden Sie den SWizzle-Code im Shader, um Rot in andere Komponenten zu duplizieren, um das D3D9-Verhalten zu erhalten.
 

D3DFMT_INDEX16

DXGI_FORMAT_R16_UINT

D3DFMT_INDEX32

DXGI_FORMAT_R32_UINT

D3DFMT_Q16W16V16U16

DXGI_FORMAT_R16G16B16A16_SNORM

D3DFMT_MULTI2_ARGB8

Nicht verfügbar

D3DFMT_R16F

DXGI_FORMAT_R16_FLOAT

D3DFMT_G16R16F

DXGI_FORMAT_R16G16_FLOAT

D3DFMT_A16B16G16R16F

DXGI_FORMAT_R16G16B16A16_FLOAT

D3DFMT_R32F

DXGI_FORMAT_R32_FLOAT

D3DFMT_G32R32F

DXGI_FORMAT_R32G32_FLOAT

D3DFMT_A32B32G32R32F

DXGI_FORMAT_R32G32B32A32_FLOAT

D3DFMT_CxV8U8

Nicht verfügbar

D3DDECLTYPE_FLOAT1

DXGI_FORMAT_R32_FLOAT

D3DDECLTYPE_FLOAT2

DXGI_FORMAT_R32G32_FLOAT

D3DDECLTYPE_FLOAT3

DXGI_FORMAT_R32G32B32_FLOAT

D3DDECLTYPE_FLOAT4

DXGI_FORMAT_R32G32B32A32_FLOAT

D3DDECLTYPED3DCOLOR

Nicht verfügbar

D3DDECLTYPE_UBYTE4

DXGI_FORMAT_R8G8B8A8_UINT

Hinweis : Der Shader ruft UINT-Werte ab, aber wenn integrale Floats im Direct3D 9-Stil erforderlich sind (0,0f, 1,0f... 255.f), UINT kann einfach in float32 im Shader konvertiert werden.
 

D3DDECLTYPE_SHORT2

DXGI_FORMAT_R16G16_SINT

Beachten Sie, dass der Shader SINT-Werte abruft, aber wenn integrale Floats im Direct3D 9-Stil erforderlich sind, kann SINT einfach in float32 im Shader konvertiert werden.
 

D3DDECLTYPE_SHORT4

DXGI_FORMAT_R16G16B16A16_SINT

Beachten Sie, dass der Shader SINT-Werte abruft, aber wenn integrale Floats im Direct3D 9-Stil erforderlich sind, kann SINT einfach in float32 im Shader konvertiert werden.
 

D3DDECLTYPE_UBYTE4N

DXGI_FORMAT_R8G8B8A8_UNORM

D3DDECLTYPE_SHORT2N

DXGI_FORMAT_R16G16_SNORM

D3DDECLTYPE_SHORT4N

DXGI_FORMAT_R16G16B16A16_SNORM

D3DDECLTYPE_USHORT2N

DXGI_FORMAT_R16G16_UNORM

D3DDECLTYPE_USHORT4N

DXGI_FORMAT_R16G16B16A16_UNORM

D3DDECLTYPE_UDEC3

Nicht verfügbar

D3DDECLTYPE_DEC3N

Nicht verfügbar

D3DDECLTYPE_FLOAT16_2

DXGI_FORMAT_R16G16_FLOAT

D3DDECLTYPE_FLOAT16_4

DXGI_FORMAT_R16G16B16A16_FLOAT

FourCC 'ATI1'

DXGI_FORMAT_BC4_UNORM

Hinweis Erfordert Featureebene 10.0 oder höher
 

FourCC 'ATI2'

DXGI_FORMAT_BC5_UNORM

Hinweis Erfordert Featureebene 10.0 oder höher
 

Zusätzliche Zuordnungsinformationen

Die Steuerung der Hardware-Gammahierarchie der Grafikkarte über IDirect3DDevice9::SetGammaRamp wird durch IDXGIOutput::SetGammaControl ersetzt. Siehe Verwenden der Gammakorrektur.

IDirect3DDevice9::P rocessVertices wird durch die Stream-Output-Funktionalität von Geometry-Shadern ersetzt. Weitere Informationen finden Sie unter "Erste Schritte mit der Streamausgabestufe".

Die Methode IDirect3DDevice9::SetClipPlane zum Festlegen von Benutzerclipebenen wurde entweder durch die HLSL-SV_ClipDistance Vertexshaderausgabesemantik (siehe Semantik), die in VS_4_0 und nach oben verfügbar ist, oder durch das neue HLSL-Clipplanes-Funktionsattribute ersetzt (siehe Benutzerclipebenen auf Featureebene 9 Hardware).

IDirect3DDevice9::SetPaletteEntries und IDirect3DDevice9::SetCurrentTexturePalette sind veraltet. Ersetzen Sie diese durch einen Pixelshader, der stattdessen Farben in einer 256 x 1-R8G8B8A8 Textur nachsieht.

Tessellationsfunktionen mit fester Funktion wie DrawRectPatch, DrawTriPatch, SetNPatchMode und DeletePatch sind veraltet. Ersetzen Sie diese durch programmierbare SM5.0-Tessellationsshader (wenn Hardware Tessellation-Shader unterstützt).

IDirect3DDevice9::SetFVF- und FVF-Codes werden nicht mehr unterstützt. Sie sollten vor dem Portieren zu D3D11-Eingabelayouts von D3D8/D3D9 FVF-Codes zu D3D9-Vertexdeklarationen portieren.

Alle D3DDECLTYPE Typen, die nicht direkt unterstützt werden, können relativ effizient mit einer kleinen Anzahl bitweiser Vorgänge am Anfang eines Vertex-Shaders in VS_4_0 und nach oben emuliert werden.