Expand description
[docs.microsoft.com] Direct3D 9 related types and APIs
Thin Direct3D9 wrappers for Rust, designed to be suitable for:
- Greenfield projects targeting ancient APIs for some reason
- Graphics middleware looking to integrate into existing D3D9 codebases
Interfaces
These are all refcounting COM smart pointers convertable to/from [mcom::Rc].
Unknown - The root type from which all sane COM types derive
├─ Direct3D[Ex] - Core factories for creating Device[Ex]s and SwapChain[Ex]s
├─ Device[Ex] - Create resources & dispatches rendering for an individual GPU
├─ SwapChain[Ex] - Manages swapping buffers for individual “views” (monitors/windows)
├─ Resource
│ ├─ Surface - 2D buffer of pixels
│ ├─ BaseTexture - A GPU-friendly collection of pixels
│ │ ├─ CubeTexture - 6-sided 2D texture
│ │ ├─ Texture - 2D texture
│ │ └─ VolumeTexture - Dense 3D texture
│ ├─ IndexBuffer - An index buffer indexes verticies in a VertexBuffer when rendering.
│ └─ VertexBuffer - A vertex buffer typically contains points of a mesh to be rendered.
├─ Resource You’d expect these to be resources, but they aren’t - they derive from Unknown.
│ ├─ Volume - 3D buffer of pixels
│ ├─ PixelShader - per-fragment GPU program
│ └─ VertexShader - per-vertex GPU program
├─ Query - An asyncronous GPU query for occlusion or other information.
├─ StateBlock - Used to capture/save and restore changes to Device state.
└─ VertexDeclaration - Describes the layout of the contents of a VertexBuffer
Rust COM Pointer | C++ [Rust Ext Trait] | Description |
---|---|---|
Unknown | IUnknown[ | The root type from which all sane COM types derive |
Direct3D | IDirect3D9[Ext] | Core factory for creating Devices |
Direct3DEx | IDirect3D9Ex[Ext] | Core factory for creating DeviceExs |
Device | IDirect3DDevice9[Ext] | Create resources & dispatches rendering for an individual GPU |
DeviceEx | IDirect3DDevice9Ex[Ext] | Create resources & dispatches rendering for an individual GPU |
SwapChain | IDirect3DSwapChain9[Ext] | Manages swapping buffers for individual monitors/windows |
SwapChainEx | IDirect3DSwapChain9Ex[Ext] | Manages swapping buffers for individual monitors/windows |
Resource | IDirect3DResource9[Ext] | Surface / *Texture / IndexBuffer / VertexBuffer |
Surface | IDirect3DSurface9[Ext] | 2D buffer of pixels |
BaseTexture | IDirect3DBaseTexture9[Ext] | A GPU-friendly collection of pixels |
CubeTexture | IDirect3DCubeTexture9[Ext] | 6-sided 2D texture |
Texture | IDirect3DTexture9[Ext] | 2D texture |
VolumeTexture | IDirect3DVolumeTexture9[Ext] | Dense 3D texture |
IndexBuffer | IDirect3DIndexBuffer9[Ext] | An index buffer indexes verticies in a VertexBuffer when rendering. |
VertexBuffer | IDirect3DVertexBuffer9[Ext] | A vertex buffer typically contains points of a mesh to be rendered. |
Volume | IDirect3DVolume9[Ext] | 3D buffer of pixels |
PixelShader | IDirect3DPixelShader9[Ext] | per-fragment GPU program |
VertexShader | IDirect3DVertexShader9[Ext] | per-vertex GPU program |
Query | IDirect3DQuery9[Ext] | An asyncronous GPU query for occlusion or other information. |
StateBlock | IDirect3DStateBlock9[Ext] | Used to capture/save and restore changes to Device state. |
VertexDeclaration | IDirect3DVertexDeclaration9[Ext] | Describes the layout of the contents of a VertexBuffer |
Enumerations
⚠️ NOTE: D3D enum
s are represented as Rust struct
s to avoid undefined behavior related to unlisted enumerants.
⚠️ NOTE: DeclMethod8, DeclType8, and DeclUsage8 are all 8-bit, despite enum D3DDECL*
being 32-bit.
❌ This makes them unsuitable for raw function FFI, due to ABI mismatches.
✔️ This makes them suitable for VertexElement FFI, as D3DVERTEXELEMENT9::{Method,Type,and Usage} are all BYTE
s.
Flags
Rust | C++ | Description |
---|---|---|
Create | D3DCREATE_* | A combination of one or more flags that controls IDirect3D9Ext::create_device behavior. |
FVF | D3DFVF_* | Describes the contents of vertices interleaved in a single data stream. |
GetData | D3DGETDATA_* | Controls how IDirect3DQuery9Ext::get_data_inplace behaves |
Issue | D3DISSUE_* | Controls how IDirect3DQuery9Ext::issue behaves |
Lock | D3DLOCK_* | A combination of zero or more locking options that describe the type of lock to perform. |
Usage | D3DUSAGE_* | Usage options that identify how resources are to be used. |
Traits
Rust | C++ | Description |
---|---|---|
unsafe Raw | Conversion trait for converting between thindx ⇄ [winapi] | |
unsafe SharedHandleParam | *mut HANDLE | Placeholder for Sharing Resources *mut HANDLE s |
Structures
Rust | C++ | Description |
---|---|---|
AdapterIdentifier | D3DADAPTER_IDENTIFIER9 | Adapter metadata (driver, Description, driver version, vendor/device ids, …) |
Caps | D3DCAPS9 | Adapter/device capabilities and limitations |
ClipStatus | D3DCLIPSTATUS9 | Describes the current clip status. |
ColorValue | D3DCOLORVALUE | A { r, g, b, a } floating-point color |
DisplayMode | D3DDISPLAYMODE | A { width, height, refresh_rate, format } display mode |
DisplayModeEx | D3DDISPLAYMODEEX | A { width, height, refresh_rate, format, scanline_ordering } display mode |
IndexBufferDesc | D3DINDEXBUFFER_DESC | Describes an IndexBuffer |
Light | D3DLIGHT9 | Describes lighting information |
Material | D3DMATERIAL9 | Describes a material that responds to lighting |
PresentStats | D3DPRESENTSTATS | Describes swapchain statistics relating to PresentEx calls. |
RasterStatus | D3DRASTER_STATUS | { in_vblank, scan_line } |
Rect | D3DRECT / RECT | [0i32 .. 1i32, 2i32 .. 3i32] signed x/y range structure |
Vector | D3DVECTOR | A { x, y, z } 3-dimensional floating point position |
VertexBufferDesc | D3DVERTEXBUFFER_DESC | Describes an VertexBuffer |
VertexElement | D3DVERTEXELEMENT9 | An element of a VertexDeclaration |
Viewport | D3DVIEWPORT9 | A { x, y, width, height, min_z, max_z } area to render into |
Values
Rust | C++ | Description |
---|---|---|
bool32 | BOOL | 32-bit boolean type that’s ABI-compatible with Win32’s BOOL |
Color | D3DCOLOR | 0xAARRGGBB style 32-bit color |
Luid | LUID | A 64-bit locally unique identifier |
SdkVersion | DWORD | Specify what Direct3D SDK to use (Direct3D[Ex]::create’s only parameter) |
Wrappers
Wrapper type | Underlying type | Description |
---|---|---|
SafeDevice | Device | Device pointer + enough metadata to make more API calls safe |
Features
feature | Description |
---|---|
9ex | !defined(D3D_DISABLE_9EX) - Enables Direct3DEx, DeviceEx, SwapChainEx, etc. |
Modules
[docs.microsoft.com] Direct3D PIX events for annotating graphics debugger traces and captures.
Structs
[docs.microsoft.com] D3DADAPTER_IDENTIFIER9
[docs.microsoft.com] D3DBACKBUFFER_TYPE
[docs.microsoft.com] (extends Resource) Texture, CubeTexture, or VolumeTexture
[docs.microsoft.com] D3DBASISTYPE
[docs.microsoft.com] D3DBASISTYPE
[docs.microsoft.com] D3DBLEND
[docs.microsoft.com] D3DBLENDOP
[docs.microsoft.com] D3DBOX / BOX
[docs.microsoft.com] D3DCS_*
[docs.microsoft.com] D3DCAPS9
[docs.microsoft.com] D3DCAPS_*
[docs.microsoft.com] D3DCAPS2_*
[docs.microsoft.com] D3DCAPS3_*
[docs.microsoft.com] D3DCLIPSTATUS9
[docs.microsoft.com] D3DCS_*
[docs.microsoft.com] D3DCMPFUNC
[docs.microsoft.com] D3DCMPFUNC
[docs.microsoft.com] D3DCOLOR
[docs.microsoft.com] D3DCOLORVALUE
[docs.microsoft.com] D3DCOMPOSERECTSOP
[docs.microsoft.com] D3DCOMPOSERECTSOP
[docs.microsoft.com] DWORD / D3DCREATE_*
[docs.microsoft.com] D3DCUBEMAP_FACES
[docs.microsoft.com] D3DCUBEMAP_FACES
[docs.microsoft.com] (extends BaseTexture) 6-faced 2D texture for use with cube mapping
Reference 6xTextureMipRefs to form cubemap dara for use with e.g. IDirect3DDevice9Ext::create_cube_texture_from.
[docs.microsoft.com] D3DCULL
[docs.microsoft.com] DWORD / D3DCURSOR_*
[docs.microsoft.com] D3DCURSORCAPS_*
[docs.microsoft.com] D3DDEBUGMONITORTOKENS
[docs.microsoft.com] D3DDEBUGMONITORTOKENS
[docs.microsoft.com] D3DDECLMETHOD, but 8 bit
[docs.microsoft.com] D3DDECLTYPE, but 8 bit
[docs.microsoft.com] D3DDECLUSAGE, but 8 bit
[docs.microsoft.com] D3DDEGREETYPE
[docs.microsoft.com] D3DDEGREETYPE
[docs.microsoft.com] D3DDEVCAPS_*
[docs.microsoft.com] D3DDEVCAPS2_*
[docs.microsoft.com] D3DDEVTYPE
[docs.microsoft.com] Core interface used for general rendering, resource creation, etc.
[docs.microsoft.com] D3DDEVICE_CREATION_PARAMETERS
[docs.microsoft.com] (extends Device) Core interface used for general rendering, resource creation, etc.
[docs.microsoft.com] Factory for use in creating your initial Device.
[docs.microsoft.com] (extends Direct3D) Factory for use in creating your initial DeviceEx.
[docs.microsoft.com] D3DDISPLAYMODE
[docs.microsoft.com] D3DDISPLAYMODEEX
[docs.microsoft.com] D3DDISPLAYMODEFILTER
[docs.microsoft.com] D3DDISPLAYROTATION
[docs.microsoft.com] D3DDTCAPS_*
[docs.microsoft.com] DWORD / D3DFVF_*
[docs.microsoft.com] D3DFILLMODE
[docs.microsoft.com] D3DFILLMODE
Similar to d3d::Format, but limited to texture-friendly formats, and adding metadata to allow safe + sound bounds.
[docs.microsoft.com] D3DFORMAT
[docs.microsoft.com] D3DFOGMODE
[docs.microsoft.com] D3DFOGMODE
[docs.microsoft.com] D3DFORMAT
[docs.microsoft.com] D3DFVFCAPS_*
[docs.microsoft.com] D3DGAMMARAMP
[docs.microsoft.com] DWORD / D3DGETDATA_*
[docs.microsoft.com] (extends Resource) An index buffer indexes verticies in a VertexBuffer when rendering.
[docs.microsoft.com] D3DINDEXBUFFER_DESC
[docs.microsoft.com] DWORD / D3DISSUE_*
[docs.microsoft.com] D3DLIGHT9
[docs.microsoft.com] D3DLIGHTTYPE
[docs.microsoft.com] D3DLINECAPS_*
[docs.microsoft.com] DWORD / D3DLOCK_*
[docs.microsoft.com] D3DLOCKED_BOX
[docs.microsoft.com] D3DLOCKED_RECT
[docs.microsoft.com] LUID
[docs.microsoft.com] D3DMATERIALCOLORSOURCE
[docs.microsoft.com] D3DMATERIAL9
[docs.microsoft.com] D3DMATERIALCOLORSOURCE
[docs.microsoft.com] D3DMATRIX
[docs.microsoft.com] D3DMEMORYPRESSURE
[docs.microsoft.com] D3DMULTISAMPLE_TYPE
[docs.microsoft.com] D3DMULTISAMPLE_TYPE
[docs.microsoft.com] D3DPBLENDCAPS_*
[docs.microsoft.com] D3DPCMPCAPS_*
[docs.microsoft.com] D3DPMISCCAPS_*
[docs.microsoft.com] D3DPRASTERCAPS_*
[docs.microsoft.com] D3DPSHADECAPS_*
[docs.microsoft.com] D3DPSHADERCAPS2_0
[docs.microsoft.com] D3DPRIMITIVETYPE
[docs.microsoft.com] D3DPTEXTURECAPS_*
[docs.microsoft.com] D3DPTFILTERCAPS_*
[docs.microsoft.com] D3DPTEXTURECAPS_*
[docs.microsoft.com] D3DPATCHEDGESTYLE
[docs.microsoft.com] D3DPATCHEDGESTYLE
[docs.microsoft.com] A pixel/fragment shader is a GPU program, run on rasterized fragments.
[docs.microsoft.com] D3DPOOL
[docs.microsoft.com] DWORD / D3DPRESENT_*
[docs.microsoft.com] DWORD / D3DPRESENTFLAG_*
[docs.microsoft.com] D3DPRESENT_PARAMETERS
[docs.microsoft.com] D3DPRESENTSTATS
[docs.microsoft.com] D3DPRIMITIVETYPE
[docs.microsoft.com] D3DPS20CAPS_*
[docs.microsoft.com] An asyncronous GPU query for occlusion or other information.
[docs.microsoft.com] D3DQUERYTYPE
[docs.microsoft.com] D3DRENDERSTATETYPE
[docs.microsoft.com] D3DRESOURCETYPE
[docs.microsoft.com] D3DRASTER_STATUS
[docs.microsoft.com] [docs.microsoft.com] D3DRECT / RECT
[docs.microsoft.com] D3DRENDERSTATETYPE
[docs.microsoft.com]
*Texture*, Surface (but not Volume!), IndexBuffer, VertexBuffer, but not *Shader!
[docs.microsoft.com] D3DRESOURCESTATS
[docs.microsoft.com] D3DRESOURCETYPE
[docs.microsoft.com] RGNDATA placeholder
[docs.microsoft.com] D3DSTATEBLOCKTYPE
[docs.microsoft.com] D3DSGR_*
[docs.microsoft.com] D3DSAMPLER_TEXTURE_TYPE
[docs.microsoft.com] Device + stored metadata allowing more APIs to be safe
[docs.microsoft.com] D3DSAMPLERSTATETYPE
[docs.microsoft.com] D3DSAMPLERSTATETYPE
[docs.microsoft.com] D3DSAMPLER_TEXTURE_TYPE
[docs.microsoft.com] D3DSCANLINEORDERING
[docs.microsoft.com] A D3D(9b)_SDK_VERSION for use with {IDirect3D9Ext, IDirect3D9ExExt}::create
[docs.microsoft.com] D3DSHADEMODE
[docs.microsoft.com] D3DSHADEMODE
[docs.microsoft.com] Used to capture/save and restore changes to Device state.
[docs.microsoft.com] D3DSTATEBLOCKTYPE
[docs.microsoft.com] D3DSTENCILCAPS_*
[docs.microsoft.com] D3DSTENCILOP
[docs.microsoft.com] D3DSTREAMSOURCE
[docs.microsoft.com] (extends Resource) A dense 2-dimensional region of data, often belonging to a Texture
[docs.microsoft.com] D3DSURFACE_DESC
[docs.microsoft.com] Manages swapping buffers for a view.
[docs.microsoft.com] (extends SwapChain) Adds more querying options.
[docs.microsoft.com] D3DSWAPEFFECT
[docs.microsoft.com] D3DTEXTUREADDRESS
[docs.microsoft.com] D3DTEXTUREOP
[docs.microsoft.com] D3DTRANSFORMSTATETYPE
[docs.microsoft.com] D3DTEXTURESTAGESTATETYPE
[docs.microsoft.com] D3DTEXTUREFILTERTYPE
[docs.microsoft.com] D3DTEXOPCAPS_*
[docs.microsoft.com] (extends BaseTexture) A dense 2-dimensional set of “pixels”
[docs.microsoft.com] D3DTEXTUREADDRESS
[docs.microsoft.com] D3DTEXTUREFILTERTYPE
Reference a 2-dimensional array of pixels for use with e.g. IDirect3DDevice9Ext::create_texture_from.
[docs.microsoft.com] D3DTEXTUREOP
[docs.microsoft.com] D3DTEXTURESTAGESTATETYPE
[docs.microsoft.com] D3DTRANSFORMSTATETYPE
Similar to d3d::Format, but presumably limited to texture-friendly formats. Unlike FixedTextureFormat, there’s no guarantee that the values of this type are
[docs.microsoft.com] DWORD / D3DUSAGE_*
[docs.microsoft.com] D3DVSHADERCAPS2_0
[docs.microsoft.com] D3DVECTOR
[docs.microsoft.com] (extends Resource) A vertex buffer typically contains points of a mesh to be rendered.
[docs.microsoft.com] D3DVERTEXBUFFER_DESC
[docs.microsoft.com] Describes the layout of the contents of a VertexBuffer
[docs.microsoft.com] D3DVERTEXELEMENT9
[docs.microsoft.com] A vertex shader transforms mesh verticies when rendering.
[docs.microsoft.com] D3DVIEWPORT9
[docs.microsoft.com] A dense 3-dimensional region of data, often belonging to a VolumeTexture
[docs.microsoft.com] D3DVOLUME_DESC
[docs.microsoft.com] (extends BaseTexture) A dense 3-dimensional set of “pixels”
Reference a 3-dimensional array of pixels for use with e.g. IDirect3DDevice9Ext::create_volume_texture_from.
[docs.microsoft.com] D3DVS20CAPS_*
[docs.microsoft.com] D3DVTXPCAPS_*
[docs.microsoft.com] D3DZBUFFERTYPE
[docs.microsoft.com] D3DZBUFFERTYPE
Enums
[docs.microsoft.com] D3DSAMPLERSTATETYPE + Value
[docs.microsoft.com] D3DSAMPLERSTATETYPE + Value
Traits
[docs.microsoft.com] IDirect3D9Ex extension methods
[docs.microsoft.com] IDirect3D9 extension methods
[docs.microsoft.com] IDirect3DBaseTexture9 extension methods
[docs.microsoft.com] IDirect3DCubeTexture9 extension methods
[docs.microsoft.com] IDirect3DDevice9Ex extension methods
[docs.microsoft.com] IDirect3DDevice9 extension methods
[docs.microsoft.com] IDirect3DIndexBuffer9 extension methods
[docs.microsoft.com] IDirect3DPixelShader9 extension methods
[docs.microsoft.com] IDirect3DQuery9 extension methods
[docs.microsoft.com] IDirect3DResource9 extension methods
[docs.microsoft.com] IDirect3DStateBlock9 extension methods
[docs.microsoft.com] IDirect3DSurface9 extension method list
[docs.microsoft.com] IDirect3DSwapChain9Ex extension methods
[docs.microsoft.com] IDirect3DSwapChain9 extension methods
[docs.microsoft.com] IDirect3DTexture9 extension methods
[docs.microsoft.com] IDirect3DVertexBuffer9 extension methods
[docs.microsoft.com] IDirect3DVertexDeclaration9 extension methods
[docs.microsoft.com] IDirect3DVertexShader9 extension methods
[docs.microsoft.com] IDirect3DVolume9 extension methods
[docs.microsoft.com] IDirect3DVolumeTexture9 extension methods
0xAARRGGBB, [0xAA, 0xRR, 0xGG, 0xBB], or (0xAA, 0xRR, 0xGG, 0xBB)
Placeholder for Sharing Resources
Functions
[docs.microsoft.com] MAKEFOURCC