Win32 API 日本語リファレンス
ホームGraphics.Direct3D12 › D3D12_RASTERIZER_DESC

D3D12_RASTERIZER_DESC

構造体
サイズx64: 44 バイト / x86: 44 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
FillModeD3D12_FILL_MODE4+0+0レンダリング時に使用するフィル モードを指定する D3D12_FILL_MODE 型の値です。
CullModeD3D12_CULL_MODE4+4+4指定した方向を向いている三角形を描画しないことを指定する D3D12_CULL_MODE 型の値です。
FrontCounterClockwiseBOOL4+8+8三角形が表向きか裏向きかを判定します。このメンバーが TRUE の場合、頂点がレンダー ターゲット上で反時計回りであれば表向き、時計回りであれば裏向きと見なされます。このパラメーターが FALSE の場合は、その逆になります。
DepthBiasINT4+12+12指定されたピクセルに加算される深度値です。深度バイアスについては、Depth Bias を参照してください。
DepthBiasClampFLOAT4+16+16ピクセルの最大深度バイアスです。深度バイアスについては、Depth Bias を参照してください。
SlopeScaledDepthBiasFLOAT4+20+20指定されたピクセルの傾きに掛けるスカラー値です。深度バイアスについては、Depth Bias を参照してください。
DepthClipEnableBOOL4+24+24

距離に基づくクリッピングを有効にするかどうかを指定します。

ハードウェアは、ラスタライズされた座標に対する x および y のクリッピングを常に実行します。DepthClipEnable が既定値である TRUE に設定されている場合、ハードウェアは z 値のクリッピングも実行します (つまり、次のアルゴリズムの最後のステップを実行します)。


0 < w
-w <= x <= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden)
-w <= y <= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden)
0 <= z <= w

DepthClipEnableFALSE に設定すると、ハードウェアは z のクリッピング (つまり、前述のアルゴリズムの最後のステップ) をスキップします。ただし、ハードウェアは "0 < w" のクリッピングは引き続き実行します。z のクリッピングを無効にすると、ピクセル レベルで深度の順序が正しくならない場合があります。その一方で、z のクリッピングを無効にすると、ステンシル シャドウの実装は簡素化されます。言い換えると、後方クリッピング平面を越えるジオメトリに対する複雑な特殊処理を避けることができます。

MultisampleEnableBOOL4+28+28マルチサンプル アンチエイリアス (MSAA) レンダー ターゲットに対して、四辺形アンチエイリアス アルゴリズムとアルファ線アンチエイリアス アルゴリズムのどちらを使用するかを指定します。四辺形の線アンチエイリアス アルゴリズムを使用するには TRUE を、アルファ線アンチエイリアス アルゴリズムを使用するには FALSE を設定します。このメンバーの詳細については、「解説」を参照してください。
AntialiasedLineEnableBOOL4+32+32線のアンチエイリアスを有効にするかどうかを指定します。線の描画を行っており、かつ MultisampleEnableFALSE の場合にのみ適用されます。このメンバーの詳細については、「解説」を参照してください。
ForcedSampleCountDWORD4+36+36

UAV レンダリング時またはラスタライズ時に強制されるサンプル数です。有効な値は 0、1、4、8、および省略可能で 16 です。0 は、サンプル数を強制しないことを示します。

メモ ForcedSampleCount に 1 以上を設定してレンダリングする場合は、次のガイドラインに従う必要があります。
  • 深度ステンシル ビューをバインドしないでください。
  • 深度テストを無効にしてください。
  • シェーダーが深度を出力しないようにしてください。
  • レンダー ターゲット ビュー (D3D12_DESCRIPTOR_HEAP_TYPE_RTV) をバインドしており、かつ ForcedSampleCount が 1 より大きい場合は、すべてのレンダー ターゲットのサンプル数が 1 のみであることを確認してください。
  • シェーダーをサンプル周波数で動作させないでください。したがって、ID3D12ShaderReflection::IsSampleFrequencyShaderFALSE を返します。
これらに従わない場合、レンダリングの動作は未定義です。
ConservativeRasterD3D12_CONSERVATIVE_RASTERIZATION_MODE4+40+40保守的ラスタライズが有効か無効かを示す D3D12_CONSERVATIVE_RASTERIZATION_MODE 型の値です。

公式ドキュメント

ラスタライザーの状態を記述します。

解説(Remarks)

D3D12_GRAPHICS_PIPELINE_STATE_DESC には、ラスタライザーの状態を表す構造体が含まれます。

ラスタライザーの状態は、ラスタライザー ステージの動作を定義します。

ラスタライザーの状態の一部を指定しなかった場合、Direct3D ランタイムはラスタライザーの状態として次の既定値を使用します。

状態 既定値
FillMode D3D12_FILL_MODE_SOLID
CullMode D3D12_CULL_MODE_BACK
FrontCounterClockwise FALSE
DepthBias 0
DepthBiasClamp 0.0f
SlopeScaledDepthBias 0.0f
DepthClipEnable TRUE
MultisampleEnable FALSE
AntialiasedLineEnable FALSE
ForcedSampleCount 0
ConservativeRaster D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF
メモ 機能レベル 9.1、9.2、9.3、および 10.0 では、MultisampleEnableFALSE を設定すると、サンプル数が 1 より大きいレンダー ターゲットであっても、ランタイムはすべての点、線、三角形をアンチエイリアスなしでレンダリングします。機能レベル 10.1 以降では、MultisampleEnable の設定は MSAA に関して点と三角形には影響せず、次の表に示すように線のレンダリング アルゴリズムの選択にのみ影響します。
線のレンダリング アルゴリズム MultisampleEnable AntialiasedLineEnable
エイリアスあり FALSE FALSE
アルファ アンチエイリアス FALSE TRUE
四辺形 TRUE FALSE
四辺形 TRUE TRUE

MultisampleEnable メンバーと AntialiasedLineEnable メンバーの設定は、マルチサンプル アンチエイリアス (MSAA) レンダー ターゲット (つまり、サンプル数が 1 より大きいレンダー ターゲット) にのみ適用されます。機能レベルによる動作の違いがあるため、線の描画を行わない場合、または線が四辺形としてレンダリングされても問題ない場合は、MSAA レンダー ターゲットにレンダリングするときは常に MultisampleEnableTRUE を設定することをお勧めします。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// D3D12_RASTERIZER_DESC  (x64 44 / x86 44 バイト)
typedef struct D3D12_RASTERIZER_DESC {
    D3D12_FILL_MODE FillMode;
    D3D12_CULL_MODE CullMode;
    BOOL FrontCounterClockwise;
    INT DepthBias;
    FLOAT DepthBiasClamp;
    FLOAT SlopeScaledDepthBias;
    BOOL DepthClipEnable;
    BOOL MultisampleEnable;
    BOOL AntialiasedLineEnable;
    DWORD ForcedSampleCount;
    D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;
} D3D12_RASTERIZER_DESC;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_RASTERIZER_DESC
{
    public int FillMode;
    public int CullMode;
    [MarshalAs(UnmanagedType.Bool)] public bool FrontCounterClockwise;
    public int DepthBias;
    public float DepthBiasClamp;
    public float SlopeScaledDepthBias;
    [MarshalAs(UnmanagedType.Bool)] public bool DepthClipEnable;
    [MarshalAs(UnmanagedType.Bool)] public bool MultisampleEnable;
    [MarshalAs(UnmanagedType.Bool)] public bool AntialiasedLineEnable;
    public uint ForcedSampleCount;
    public int ConservativeRaster;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_RASTERIZER_DESC
    Public FillMode As Integer
    Public CullMode As Integer
    <MarshalAs(UnmanagedType.Bool)> Public FrontCounterClockwise As Boolean
    Public DepthBias As Integer
    Public DepthBiasClamp As Single
    Public SlopeScaledDepthBias As Single
    <MarshalAs(UnmanagedType.Bool)> Public DepthClipEnable As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public MultisampleEnable As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public AntialiasedLineEnable As Boolean
    Public ForcedSampleCount As UInteger
    Public ConservativeRaster As Integer
End Structure
import ctypes
from ctypes import wintypes

class D3D12_RASTERIZER_DESC(ctypes.Structure):
    _fields_ = [
        ("FillMode", ctypes.c_int),
        ("CullMode", ctypes.c_int),
        ("FrontCounterClockwise", wintypes.BOOL),
        ("DepthBias", ctypes.c_int),
        ("DepthBiasClamp", ctypes.c_float),
        ("SlopeScaledDepthBias", ctypes.c_float),
        ("DepthClipEnable", wintypes.BOOL),
        ("MultisampleEnable", wintypes.BOOL),
        ("AntialiasedLineEnable", wintypes.BOOL),
        ("ForcedSampleCount", wintypes.DWORD),
        ("ConservativeRaster", ctypes.c_int),
    ]
#[repr(C)]
pub struct D3D12_RASTERIZER_DESC {
    pub FillMode: i32,
    pub CullMode: i32,
    pub FrontCounterClockwise: i32,
    pub DepthBias: i32,
    pub DepthBiasClamp: f32,
    pub SlopeScaledDepthBias: f32,
    pub DepthClipEnable: i32,
    pub MultisampleEnable: i32,
    pub AntialiasedLineEnable: i32,
    pub ForcedSampleCount: u32,
    pub ConservativeRaster: i32,
}
import "golang.org/x/sys/windows"

type D3D12_RASTERIZER_DESC struct {
	FillMode int32
	CullMode int32
	FrontCounterClockwise int32
	DepthBias int32
	DepthBiasClamp float32
	SlopeScaledDepthBias float32
	DepthClipEnable int32
	MultisampleEnable int32
	AntialiasedLineEnable int32
	ForcedSampleCount uint32
	ConservativeRaster int32
}
type
  D3D12_RASTERIZER_DESC = record
    FillMode: Integer;
    CullMode: Integer;
    FrontCounterClockwise: BOOL;
    DepthBias: Integer;
    DepthBiasClamp: Single;
    SlopeScaledDepthBias: Single;
    DepthClipEnable: BOOL;
    MultisampleEnable: BOOL;
    AntialiasedLineEnable: BOOL;
    ForcedSampleCount: DWORD;
    ConservativeRaster: Integer;
  end;
const D3D12_RASTERIZER_DESC = extern struct {
    FillMode: i32,
    CullMode: i32,
    FrontCounterClockwise: i32,
    DepthBias: i32,
    DepthBiasClamp: f32,
    SlopeScaledDepthBias: f32,
    DepthClipEnable: i32,
    MultisampleEnable: i32,
    AntialiasedLineEnable: i32,
    ForcedSampleCount: u32,
    ConservativeRaster: i32,
};
type
  D3D12_RASTERIZER_DESC {.bycopy.} = object
    FillMode: int32
    CullMode: int32
    FrontCounterClockwise: int32
    DepthBias: int32
    DepthBiasClamp: float32
    SlopeScaledDepthBias: float32
    DepthClipEnable: int32
    MultisampleEnable: int32
    AntialiasedLineEnable: int32
    ForcedSampleCount: uint32
    ConservativeRaster: int32
struct D3D12_RASTERIZER_DESC
{
    int FillMode;
    int CullMode;
    int FrontCounterClockwise;
    int DepthBias;
    float DepthBiasClamp;
    float SlopeScaledDepthBias;
    int DepthClipEnable;
    int MultisampleEnable;
    int AntialiasedLineEnable;
    uint ForcedSampleCount;
    int ConservativeRaster;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; D3D12_RASTERIZER_DESC サイズ: 44 バイト(x64)
dim st, 11    ; 4byte整数×11(構造体サイズ 44 / 4 切り上げ)
; FillMode : D3D12_FILL_MODE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; CullMode : D3D12_CULL_MODE (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; FrontCounterClockwise : BOOL (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; DepthBias : INT (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; DepthBiasClamp : FLOAT (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; SlopeScaledDepthBias : FLOAT (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; DepthClipEnable : BOOL (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; MultisampleEnable : BOOL (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; AntialiasedLineEnable : BOOL (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ForcedSampleCount : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ConservativeRaster : D3D12_CONSERVATIVE_RASTERIZATION_MODE (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global D3D12_RASTERIZER_DESC
    #field int FillMode
    #field int CullMode
    #field bool FrontCounterClockwise
    #field int DepthBias
    #field float DepthBiasClamp
    #field float SlopeScaledDepthBias
    #field bool DepthClipEnable
    #field bool MultisampleEnable
    #field bool AntialiasedLineEnable
    #field int ForcedSampleCount
    #field int ConservativeRaster
#endstruct

stdim st, D3D12_RASTERIZER_DESC        ; NSTRUCT 変数を確保
st->FillMode = 100
mes "FillMode=" + st->FillMode