Поделиться через


Сохранение состояния пикселей с помощью StateBlock (Direct3D 9)

Блок состояния можно использовать для записи только состояния пикселей (см. раздел Сохранение и восстановление состояния блоков состояния (Direct3D 9)). Следующее состояние является состоянием пикселя:

Чтобы записать состояние пикселей с помощью блока состояний, укажите D3DSBT_PIXELSTATE при вызове IDirect3Device9::CreateStateBlock.

Конвейер пикселей: состояние отрисовки

Состояния отрисовки устройства влияют на поведение почти каждой части конвейера. Состояния отрисовки задаются путем вызова IDirect3DDevice9::SetRenderState.

В следующей таблице приведены все состояния отрисовки, которые настраивают состояние пикселей:

Состояния отрисовки Значение по умолчанию
D3DRS_ZENABLE D3DZB_FALSE
D3DRS_SPECULARENABLE FALSE
D3DFILLMODE D3DFILL_SOLID
D3DSHADEMODE D3DSHADE_GOURAUD
D3DRS_ZWRITEENABLE TRUE
D3DRS_ALPHATESTENABLE FALSE
D3DRS_LASTPIXEL TRUE
D3DRS_SRCBLEND D3DBLEND_ONE
D3DRS_DESTBLEND D3DBLEND_ZERO
D3DRS_ZFUNC D3DCMP_LESSEQUAL
D3DRS_ALPHAREF 0
D3DRS_ALPHAFUNC D3DCMP_ALWAYS
D3DRS_DITHERENABLE FALSE
D3DRS_FOGSTART 0
D3DRS_FOGEND 1
D3DRS_FOGDENSITY 1
D3DRS_ALPHABLENDENABLE FALSE
D3DRS_DEPTHBIAS 0
D3DRS_STENCILENABLE FALSE
D3DRS_STENCILFAIL D3DSTENCILOP_KEEP
D3DRS_STENCILZFAIL D3DSTENCILOP_KEEP
D3DRS_STENCILPASS D3DSTENCILOP_KEEP
D3DRS_STENCILFUNC D3DCMP_ALWAYS
D3DRS_STENCILREF 0
D3DRS_STENCILMASK 0xffffffff
D3DRS_STENCILWRITEMASK 0xffffffff
D3DRS_TEXTUREFACTOR 0xffffffff
D3DRS_WRAP0 0
D3DRS_WRAP1 0
D3DRS_WRAP2 0
D3DRS_WRAP3 0
D3DRS_WRAP4 0
D3DRS_WRAP5 0
D3DRS_WRAP6 0
D3DRS_WRAP7 0
D3DRS_WRAP8 0
D3DRS_WRAP9 0
D3DRS_WRAP10 0
D3DRS_WRAP11 0
D3DRS_WRAP12 0
D3DRS_WRAP13 0
D3DRS_WRAP14 0
D3DRS_WRAP15 0
D3DRS_LOCALVIEWER TRUE
D3DRS_EMISSIVEMATERIALSOURCE D3DMCS_MATERIAL
D3DRS_AMBIENTMATERIALSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE D3DMCS_COLOR1
D3DRS_SPECULARMATERIALSOURCE D3DMCS_COLOR2
D3DRS_COLORWRITEENABLE 0x0000000f
D3DBLENDOP D3DBLENDOP_ADD
D3DRS_SCISSORTESTENABLE FALSE
D3DRS_SLOPESCALEDEPTHBIAS 0
D3DRS_ANTIALIASEDLINEENABLE FALSE
D3DRS_TWOSIDEDSTENCILMODE FALSE
D3DRS_CCW_STENCILFAIL D3DSTENCILOP_KEEP
D3DRS_CCW_STENCILZFAIL D3DSTENCILOP_KEEP
D3DRS_CCW_STENCILPASS D3DSTENCILOP_KEEP
D3DRS_CCW_STENCILFUNC D3DCMP_ALWAYS
D3DRS_COLORWRITEENABLE1 0x0000000f
D3DRS_COLORWRITEENABLE2 0x0000000f
D3DRS_COLORWRITEENABLE3 0x0000000f
D3DRS_BLENDFACTOR 0xffffffff
D3DRS_SRGBWRITEENABLE 0
D3DRS_SEPARATEALPHABLENDENABLE FALSE
D3DRS_SRCBLENDALPHA D3DBLEND_ONE
D3DRS_DESTBLENDALPHA D3DBLEND_ZERO
D3DRS_BLENDOPALPHA D3DBLENDOP_ADD

 

Пиксельный конвейер: состояние выборки

Состояния выборки управляют темами, связанными с выборкой, такими как фильтрация, мозаичная плитка и режимы адресов координат текстуры. Используйте IDirect3DDevice9::SetSamplerState , чтобы настроить состояние выборки (включая то, которое используется в блоке тесселлатора для выборки карт смещения). Состояния выборки были переименованы с префиксом "D3DSAMP_", чтобы включить обнаружение ошибок во время компиляции при переносе из DirectX 8.

В следующей таблице приведены все состояния выборки, которые настраивают состояние пикселей:

Состояния выборки Значение по умолчанию
D3DSAMP_ADDRESSU D3DTADDRESS_WRAP
D3DSAMP_ADDRESSV D3DTADDRESS_WRAP
D3DSAMP_ADDRESSW D3DTADDRESS_WRAP
D3DSAMP_BORDERCOLOR 0x00000000
D3DSAMP_MAGFILTER D3DTEXF_POINT
D3DSAMP_MINFILTER D3DTEXF_POINT
D3DSAMP_MIPFILTER D3DTEXF_NONE
D3DSAMP_MIPMAPLODBIAS 0
D3DSAMP_MAXMIPLEVEL 0
D3DSAMP_MAXANISOTROPY 1
D3DSAMP_SRGBTEXTURE 0
D3DSAMP_ELEMENTINDEX 0

 

Пиксельный конвейер: состояние текстуры

Состояния текстуры управляют операциями наложения текстур в средстве блендера с несколькими текстурами. Используйте IDirect3DDevice9::SetTextureStageState для настройки состояний стадии текстуры. Используйте IDirect3DDevice9::SetTexture , чтобы связать текстуру с этапом выборки.

В следующей таблице приведены все состояния текстуры, которые настраивают состояние пикселей.

Состояния текстуры Значение по умолчанию
D3DTSS_COLOROP D3DTOP_DISABLE
D3DTSS_COLORARG1 D3DTA_TEXTURE
D3DTSS_COLORARG2 D3DTA_CURRENT
D3DTSS_ALPHAOP D3DTOP_DISABLE
D3DTSS_ALPHAARG1 D3DTA_TEXTURE
D3DTSS_ALPHAARG2 D3DTA_CURRENT
D3DTSS_BUMPENVMAT00 0
D3DTSS_BUMPENVMAT01 0
D3DTSS_BUMPENVMAT10 0
D3DTSS_BUMPENVMAT11 0
D3DTSS_TEXCOORDINDEX 0
D3DTSS_BUMPENVLSCALE 0
D3DTSS_BUMPENVLOFFSET 0
D3DTSS_TEXTURETRANSFORMFLAGS D3DTTFF_DISABLE
D3DTSS_COLORARG0 D3DTA_CURRENT
D3DTSS_ALPHAARG0 D3DTA_CURRENT
D3DTSS_RESULTARG D3DTA_CURRENT

 

Сохранение и восстановление состояния блоков состояний