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

D3D11_RASTERIZER_DESC1

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

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

フィールド

フィールドサイズx64x86説明
FillModeD3D11_FILL_MODE4+0+0レンダリング時に使用する塗りつぶしモードを決定します。
CullModeD3D11_CULL_MODE4+4+4指定した方向を向いている三角形を描画しないことを示します。
FrontCounterClockwiseBOOL4+8+8三角形が表向きか裏向きかを指定します。TRUE の場合、レンダー ターゲット上で頂点が反時計回りに並んでいる三角形は表向き、時計回りに並んでいる三角形は裏向きと見なされます。FALSE の場合はその逆になります。
DepthBiasINT4+12+12指定されたピクセルに加算される深度値。深度バイアスについては、深度バイアスを参照してください。
DepthBiasClampFLOAT4+16+16ピクセルの最大深度バイアス。深度バイアスについては、深度バイアスを参照してください。
SlopeScaledDepthBiasFLOAT4+20+20指定されたピクセルの傾きに対するスカラー値。深度バイアスについては、深度バイアスを参照してください。
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 クリッピングを無効にするとステンシル シャドウの実装は簡素になります。つまり、後方クリッピング平面を越えるジオメトリに対する複雑な特殊処理を避けることができます。

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

UAV レンダリングまたはラスタライズの際に強制されるサンプル数。有効な値は 0、1、2、4、8、および実装によっては 16 です。0 はサンプル数を強制しないことを示します。

Note ForcedSampleCount を 1 以上に設定してレンダリングする場合は、次のガイドラインに従う必要があります。
  • 深度ステンシル ビューをバインドしないでください。
  • 深度テストを無効にしてください。
  • シェーダーが深度を出力しないようにしてください。
  • レンダー ターゲット ビュー (D3D11_BIND_RENDER_TARGET) をバインドしていて、かつ ForcedSampleCount が 1 より大きい場合は、すべてのレンダー ターゲットのサンプル数が 1 のみであることを確認してください。
  • シェーダーをサンプル周波数で動作させないでください。したがって、ID3D11ShaderReflection::IsSampleFrequencyShaderFALSE を返します。
これに従わない場合、レンダリングの動作は未定義です。深度ステンシルの構成方法については、深度ステンシル機能の構成を参照してください。

公式ドキュメント

Note この構造体は、Windows 8 以降のオペレーティング システムで利用できる Direct3D 11.1 ランタイムでサポートされます。
ラスタライザーの状態を記述します。

解説(Remarks)

ラスタライザーの状態は、ラスタライザー ステージの動作を定義します。ラスタライザー状態オブジェクトを作成するには、ID3D11Device1::CreateRasterizerState1 を呼び出します。ラスタライザーの状態を設定するには、ID3D11DeviceContext::RSSetState を呼び出します。

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

状態 既定値
FillMode Solid
CullMode Back
FrontCounterClockwise FALSE
DepthBias 0
SlopeScaledDepthBias 0.0f
DepthBiasClamp 0.0f
DepthClipEnable TRUE
ScissorEnable FALSE
MultisampleEnable FALSE
AntialiasedLineEnable FALSE
ForcedSampleCount 0
Note 機能レベル 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>

// D3D11_RASTERIZER_DESC1  (x64 44 / x86 44 バイト)
typedef struct D3D11_RASTERIZER_DESC1 {
    D3D11_FILL_MODE FillMode;
    D3D11_CULL_MODE CullMode;
    BOOL FrontCounterClockwise;
    INT DepthBias;
    FLOAT DepthBiasClamp;
    FLOAT SlopeScaledDepthBias;
    BOOL DepthClipEnable;
    BOOL ScissorEnable;
    BOOL MultisampleEnable;
    BOOL AntialiasedLineEnable;
    DWORD ForcedSampleCount;
} D3D11_RASTERIZER_DESC1;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D11_RASTERIZER_DESC1
{
    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 ScissorEnable;
    [MarshalAs(UnmanagedType.Bool)] public bool MultisampleEnable;
    [MarshalAs(UnmanagedType.Bool)] public bool AntialiasedLineEnable;
    public uint ForcedSampleCount;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D11_RASTERIZER_DESC1
    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 ScissorEnable As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public MultisampleEnable As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public AntialiasedLineEnable As Boolean
    Public ForcedSampleCount As UInteger
End Structure
import ctypes
from ctypes import wintypes

class D3D11_RASTERIZER_DESC1(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),
        ("ScissorEnable", wintypes.BOOL),
        ("MultisampleEnable", wintypes.BOOL),
        ("AntialiasedLineEnable", wintypes.BOOL),
        ("ForcedSampleCount", wintypes.DWORD),
    ]
#[repr(C)]
pub struct D3D11_RASTERIZER_DESC1 {
    pub FillMode: i32,
    pub CullMode: i32,
    pub FrontCounterClockwise: i32,
    pub DepthBias: i32,
    pub DepthBiasClamp: f32,
    pub SlopeScaledDepthBias: f32,
    pub DepthClipEnable: i32,
    pub ScissorEnable: i32,
    pub MultisampleEnable: i32,
    pub AntialiasedLineEnable: i32,
    pub ForcedSampleCount: u32,
}
import "golang.org/x/sys/windows"

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

HSP用 定義

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

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

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