Состояния эффектов (Direct3D 9)
Состояния эффектов используются для инициализации состояний конвейера при подготовке к обработке вершин и пикселей.
effect state [ [index] ] = expression;
Где:
- состояние эффекта — аналогично традиционным состояниям конвейера фиксированной функции. Полный список состояний приведен ниже.
- [ [index] ] — необязательный целочисленный индекс. Индекс идентифицирует определенное состояние в массиве состояний эффекта. Внешние скобки указывают, что индекс является необязательным. Если используется индекс, обязательно используйте внутренние скобки.
- expression — выражение присваивания состояния. См. раздел Выражения (Direct3D 9).
Каждое состояние имеет собственный тип данных. Это тип данных, в который состояние ожидает, что значения будут находиться при их назначении эффектом. Типы данных, ожидаемые для каждого состояния, перечислены ниже.
Обратите внимание, что интерфейс эффекта попытается привести значения к соответствующему типу как можно раньше. Литеральные значения можно привести во время компиляции. При вызове соответствующих методов Set необходимо привести не-литералы (т. е. обычные переменные). Например, интерфейс эффекта при необходимости приводит значения, заданные с помощью SetBool, SetValue и других аналогичных функций. Для повышения производительности убедитесь, что значения, передаваемые в интерфейс эффекта, уже имеют правильный тип и не требуют приведения. Если среде выполнения не удается привести значение, возвращается ошибка.
Состояния эффекта можно разделить на следующие категории:
- Светлые состояния
- Состояния материалов
- Состояния отрисовки
- Состояния выборки
- Состояния стадии выборки
- Состояния шейдера
- Константные состояния шейдера
- Состояния текстуры
- Состояния стадии текстуры
- Преобразование состояний
Светлые состояния
Чтобы обеспечить оптимальную производительность при применении эффекта, в файле эффекта должны быть указаны все компоненты света или материала. Для состояний, которые не удается объявить, задано некоторое значение по умолчанию, так как Direct3D не может задавать состояния освещения по отдельности.
Состояние света | Тип | Значения |
---|---|---|
LightAmbient[n] | float4 | См. элемент Ambient объекта D3DLIGHT9. |
LightAttenuation0[n] | FLOAT | См. элемент Attenuation0 D3DLIGHT9. |
LightAttenuation1[n] | FLOAT | См. элемент Attenuation1 В D3DLIGHT9. |
LightAttenuation2[n] | FLOAT | См. элемент Attenuation2 в D3DLIGHT9. |
LightDiffuse[n] | float4 | См. диффузный элемент D3DLIGHT9. |
LightDirection[n] | float3 | См. элемент Direction объекта D3DLIGHT9. |
LightEnable[n] | bool | TRUE или FALSE. См. аргумент bEnable в LightEnable. |
LightFalloff[n] | FLOAT | D3DCOLORVALUE. См. элемент Falloff D3DLIGHT9. |
LightPhi[n] | FLOAT | См. элемент Phi D3DLIGHT9. |
LightPosition[n] | float3 | См. позицию элемента D3DLIGHT9. |
LightRange[n] | FLOAT | См. элемент Range объекта D3DLIGHT9. |
LightSpecular[n] | float4 | См. specular member of D3DLIGHT9. |
LightTheta[n] | FLOAT | См. элемент Theta D3DLIGHT9. |
LightType[n] | dword | То же значение, что и массив значений D3DLIGHTTYPE без префикса D3DLIGHT_. |
Пример
LightEnable[0] = TRUE;
LightType[0] = POINT;
LightPosition[0] = float3<10.0f, 1.0f, 23.0f>;
LightAmbient[0] = float4<0.7f, 0.0f, 0.0f, 1.0f>;
Это позволит включить освещение, сделать точечное освещение типом, задать положение освещения float3<10.0f, 1.0f, 23.0f> и задать для цвета окружающей среды значение float4<0.7f, 0.0f, 0.0f, 1.0f>.
Состояния материалов
Для состояний, которые не удается объявить, задано некоторое значение по умолчанию, так как Direct3D не может задать состояния материала по отдельности.
Состояние материала | Тип | Значения |
---|---|---|
MaterialAmbient | float4 | То же значение, что и Ambient |
MaterialDiffuse | float4 | То же значение, что и Диффузный |
MaterialEmissive | float4 | То же значение, что и Emissive |
MaterialPower | FLOAT | То же значение, что и Power |
MaterialSpecular | float4 | То же значение, что и зеркальный |
Пример
MaterialDiffuse = float4<0.7f, 0.0f, 0.0f, 1.0f>;
MaterialPower = 3.0f;
Это установит для рассеянного цвета значение float4<0.7f, 0.0f, 0.0f, 1.0f> и сделает силу материала 3.0f.
Состояния отрисовки
Существует два типа состояний отрисовки:
Состояния отрисовки пиксельной трубы
Имена состояний отрисовки файла эффектов похожи на состояния конвейера фиксированной функции, часто с удаленным префиксом.
Состояние отрисовки | Тип | Значения |
---|---|---|
AlphaBlendEnable | bool | Верно или неверно. Те же значения, что и D3DRS_ALPHABLENDENABLE в D3DRENDERSTATETYPE. |
AlphaFunc | dword | Те же значения, что и D3DCMPFUNC без префикса D3DCMP_. См. D3DRS_ALPHAFUNC. |
AlphaRef | dword | Те же значения, что и D3DRS_ALPHAREF. |
AlphaTestEnable | dword | Верно или неверно. См. D3DRS_ALPHATESTENABLE. |
BlendOp | dword | Те же значения, что и D3DBLENDOP без префикса D3DBLENDOP_. |
ColorWriteEnable | dword | Побитовое сочетание red, green, blue и alpha. См. D3DRS_COLORWRITEENABLE. |
DepthBias | FLOAT | Те же значения, что и D3DRS_DEPTHBIAS. |
DestBlend | dword | Те же значения, что и D3DBLEND без префикса D3DBLEND_. |
DitherEnable | bool | Верно или неверно. Те же значения, что и D3DRS_DITHERENABLE. |
FillMode | dword | Те же значения, что и D3DFILLMODE без префикса D3DFILL_. |
LastPixel | dword | Верно или неверно. См. D3DRS_LASTPIXEL. |
Режимраскр | dword | Те же значения, что и D3DSHADEMODE без префикса D3DSHADE_. |
SlopeScaleDepthBias | FLOAT | Те же значения, что и D3DRS_SLOPESCALEDEPTHBIAS. |
SrcBlend | dword | Те же значения, что и D3DBLEND без префикса D3DBLEND_. |
SRGBWriteEnable | bool | Верно или неверно. Те же значения, что и D3DRS_SRGBWRITEENABLE. |
StencilEnable | bool | Верно или неверно. Те же значения, что и D3DRS_STENCILENABLE. |
StencilFail | dword | Те же значения, что и D3DSTENCILCAPS без префикса D3DSTENCILCAP_. См. D3DRS_STENCILFAIL. |
StencilFunc | dword | Те же значения, что и D3DCMPFUNC без префикса D3DCMP_. См. D3DRS_STENCILFUNC. |
StencilMask | dword | Те же значения, что и D3DRS_STENCILMASK. |
StencilPass | dword | Те же значения, что и D3DSTENCILCAPS без префикса D3DSTENCILCAP_. См. D3DRS_STENCILPASS. |
StencilRef | INT | Те же значения, что и D3DRS_STENCILREF. |
StencilWriteMask | dword | Те же значения, что и D3DRS_STENCILWRITEMASK. |
StencilZFail | dword | Те же значения, что и D3DSTENCILCAPS без префикса D3DSTENCILCAP_. См. D3DRS_STENCILZFAIL. |
TextureFactor | dword | Те же значения, что и D3DCOLOR. Те же значения, что и D3DRS_TEXTUREFACTOR. |
Wrap0 — wrap15 | dword | Значения совпадают со значениями, используемыми D3DRS_WRAP0. Допустимые значения:
|
ZEnable | dword | Те же значения, что и D3DZBUFFERTYPE без префикса D3DZB_. |
ZFunc | dword | Те же значения, что и D3DCMPFUNC без префикса D3DCMP_. См. D3DRS_ZFUNC. |
ZWriteEnable | bool | Верно или неверно. См. D3DRS_ZWRITEENABLE. |
Пример
AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;
Это позволит включить альфа-смешивание и сделать все геометрические объекты отрисовывая в проволочной рамке.
Состояния отрисовки вершинного канала
Имена состояний отрисовки файла эффектов похожи на состояния конвейера фиксированной функции, часто с удаленным префиксом.
Состояние отрисовки | Тип | Значения |
---|---|---|
Окружающее | float4 | Те же значения, что и D3DRS_AMBIENT. |
AmbientMaterialSource | dword | Те же значения, что и D3DMATERIALCOLORSOURCE без префикса D3DMCS_. См. D3DRS_AMBIENTMATERIALSOURCE. |
Усечение | bool | Верно или неверно. Те же значения, что и D3DRS_CLIPPING. |
ClipPlaneEnable | dword | Побитовая комбинация макросов D3DCLIPPLANE0 - D3DCLIPPLANE5. См . раздел D3DCLIPPLANEn и D3DRS_CLIPPLANEENABLE. |
ColorVertex | bool | Верно или неверно. Те же значения, что и D3DRS_COLORVERTEX. |
CullMode | dword | Те же значения, что и D3DCULL без префикса D3DCULL_. |
Диффузный материалоисточник | dword | Те же значения, что и D3DMATERIALCOLORSOURCE без префикса D3DMCS_. См. D3DRS_DIFFUSEMATERIALSOURCE. |
EmissiveMaterialSource | dword | Те же значения, что и D3DMATERIALCOLORSOURCE без префикса D3DMCS_. См. D3DRS_EMISSIVEMATERIALSOURCE. |
Туманный цвет | dword | Те же значения, что и D3DCOLOR. См. D3DRS_FOGCOLOR. |
FogDensity | FLOAT | Те же значения, что и D3DRS_FOGDENSITY. |
FogEnable | bool | Верно или неверно. Те же значения, что и D3DRS_FOGENABLE. |
FogEnd | FLOAT | Те же значения, что и D3DRS_FOGEND. |
FogStart | FLOAT | Те же значения, что и D3DRS_FOGSTART. |
FogTableMode | dword | Те же значения, что и D3DFOGMODE. См. D3DRS_FOGTABLEMODE в D3DRENDERSTATETYPE. |
FogVertexMode | dword | Те же значения, что и D3DFOGMODE без префикса D3DFOG_. |
IndexedVertexBlendEnable | bool | Верно или неверно. Те же значения, что и D3DRS_INDEXEDVERTEXBLENDENABLE. |
Освещение | bool | Верно или неверно. Те же значения, что и D3DRS_LIGHTING. |
LocalViewer | bool | Верно или неверно. Те же значения, что и D3DRS_LOCALVIEWER. |
MultiSampleAntialias | bool | Те же значения, что и D3DRS_MULTISAMPLEANTIALIAS. |
MultiSampleMask | dword | Те же значения, что и D3DRS_MULTISAMPLEMASK. |
Нормализация нормальных значений | bool | Верно или неверно. Те же значения, что и D3DRS_NORMALIZENORMALS. |
PatchSegments | FLOAT | Те же значения, что и nSegments в SetNPatchMode. |
PointScale_A | FLOAT | Те же значения, что и D3DRS_POINTSCALE_A. |
PointScale_B | FLOAT | Те же значения, что и D3DRS_POINTSCALE_B. |
PointScale_C | FLOAT | Те же значения, что и D3DRS_POINTSCALE_C. |
PointScaleEnable | bool | Те же значения, что и D3DRS_POINTSCALEENABLE. |
PointSize | FLOAT | Те же значения, что и D3DRS_POINTSIZE. |
PointSize_Min | FLOAT | Те же значения, что и D3DRS_POINTSIZE_MIN. |
PointSize_Max | FLOAT | Те же значения, что и D3DRS_POINTSIZE_MAX без префикса D3DRS_. |
PointSpriteEnable | bool | Верно или неверно. Те же значения, что и D3DRS_POINTSPRITEENABLE. |
RangeFogEnable | bool | Верно или неверно. Те же значения, что и D3DRS_RANGEFOGENABLE. |
SpecularEnable | bool | Верно или неверно. Те же значения, что и D3DRS_SPECULARENABLE. |
SpecularMaterialSource | dword | Те же значения, что и D3DMATERIALCOLORSOURCE без префикса D3DMCS_. См. D3DRS_SPECULARMATERIALSOURCE. |
TweenFactor | FLOAT | Те же значения, что и D3DRS_TWEENFACTOR. |
VertexBlend | dword | Те же значения, что и D3DVERTEXBLENDFLAGS без префикса D3DVBF_. См. D3DRS_VERTEXBLEND. |
Пример
Ambient = float4<0.7f, 0.0f, 0.0f, 1.0f>;
CullMode = CCW;
FogColor = 0xff0000;
Это приведет к тому, что внешний цвет float4<0.7f, 0.0f, 0.0f, 1.0f>, установит режим отбраковки задней поверхности в против часовой стрелке, а цвет тумана — красный.
Состояния выборки
Состояние выборки представляет объект sampler.
Состояние | Тип | Значения |
---|---|---|
Образец | Сборники | NULL или блок состояния выборки. |
Состояния стадии выборки
Состояния стадии выборки используются для выборки текстур. Состояние выборки определяет типы фильтрации и режимы адресации текстур.
Состояние выборки | Тип | Значения |
---|---|---|
AddressU[16] | dword | Те же значения, что и D3DTEXTUREADDRESS без префикса D3DTADDRESS_. См. D3DSAMP_ADDRESSU. |
AddressV[16] | dword | Те же значения, что и D3DTEXTUREADDRESS без префикса D3DTADDRESS_. См. D3DSAMP_ADDRESSV. |
AddressW[16] | dword | Те же значения, что и D3DTEXTUREADDRESS без префикса D3DTADDRESS_. См. D3DSAMP_ADDRESSW. |
BorderColor[16] | D3DCOLOR | Те же значения, что и D3DTEXTUREFILTERTYPE без префикса D3DTEXF_. См. D3DSAMP_BORDERCOLOR. |
MagFilter[16] | dword | Те же значения, что и D3DTEXTUREFILTERTYPE без префикса D3DTEXF_. См. D3DSAMP_MAGFILTER. |
MaxAnisotropy[16] | dword | Те же значения, что и D3DSAMP_MAXANISOTROPY без префикса D3DSAMP_. |
MaxMipLevel[16] | INT | Те же значения, что и D3DSAMP_MAXMIPLEVEL без префикса D3DSAMP_. |
MinFilter[16] | dword | Те же значения, что и D3DSAMP_MINFILTER без префикса D3DSAMP_. |
MipFilter[16] | dword | Те же значения, что и D3DSAMP_MIPFILTER без префикса D3DSAMP_. |
MipMapLodBias[16] | FLOAT | Те же значения, что и D3DSAMP_MIPMAPLODBIAS без префикса D3DSAMP_. |
SRGBTexture | bool | То же значение, что и D3DSAMP_SRGBTEXTURE без префикса D3DSAMP_. |
Пример
AddressU[0] = CLAMP;
AddressV[0] = CLAMP;
AddressW[0] = CLAMP;
Это зажимает значения UVW в диапазоне от 0 до 1.
Состояния шейдера
Существует только два состояния шейдера эффекта: одно связано с объектом вершинного шейдера, а другое — с объектом пиксельного шейдера.
Состояние шейдера | Тип | Значения |
---|---|---|
PixelShader | pixelshader | NULL, блок сборки, целевой объект компиляции или параметр пиксельного шейдера. |
VertexShader | vertexshader | NULL, блок сборки, целевой объект компиляции или параметр пиксельного шейдера. |
Пример
VertexShader = compile vs_1_1 VSTexture();
PixelShader = NULL;
Это скомпилирует VSTexture, шейдер вершин, определенный ранее в FX-файле, в шейдер вершин версии 1.1, а затем установит скомпилированный шейдер в качестве вершинного шейдера. Шейдеру пикселей присваивается значение NULL.
Константные состояния шейдера
Состояния констант шейдера используются для доступа к параметрам констант шейдера.
Состояние константы шейдера | Тип | Значения |
---|---|---|
PixelShaderConstant | float[m[n]] | m x n массив с плавающей точкой; m и n являются необязательными. |
PixelShaderConstant1 | float4 | Один 4D float. |
PixelShaderConstant2 | float4x2 | Два 4D с плавающей точкой. |
PixelShaderConstant3 | float4x3 | Три 4D-с плавающей запятой. |
PixelShaderConstant4 | float4x4 | Четыре 4D-с плавающей запятой. |
PixelShaderConstantB | bool[m[n]] | m x n массив bools; m и n являются необязательными. |
PixelShaderConstantI | int[m[n]] | m x n массив ints. m и n являются необязательными. |
PixelShaderConstantF | float[m[n]] | m x n массив с плавающей точкой. m и n являются необязательными. |
VertexShaderConstant | float[m[n]] | m x n массив с плавающей точкой. m и n являются необязательными. |
VertexShaderConstant1 | float4 | Один 4D float. |
VertexShaderConstant2 | float4x2 | Два 4D с плавающей точкой. |
VertexShaderConstant3 | float4x3 | Три 4D-с плавающей запятой. |
VertexShaderConstant4 | float4x4 | Четыре 4D-с плавающей запятой. |
VertexShaderConstantB | bool[m[n]] | m x n массив bools. m и n являются необязательными. |
VertexShaderConstantI | int[m[n]] | m x n массив ints. m и n являются необязательными. |
VertexShaderConstantF | float[m[n]] | m x n массив с плавающей точкой. m и n являются необязательными. |
Состояния текстуры
Состояния текстур инициализируют текстуры, используемые многотекстовый блендер.
Состояние текстуры | Тип | Значения |
---|---|---|
Текстура[8] | текстура | NULL или параметр текстуры. |
Состояния стадии текстуры
Состояния стадии текстуры настраивают текстуры и этапы текстуры в мультитекстовом блендере.
Состояние этапа текстуры | Тип | Значения |
---|---|---|
AlphaOp[8] | dword | Аналогично D3DTEXTUREOP без префикса D3DTOP_. См. D3DTSS_ALPHAOP. |
AlphaArg0[8] | dword | Аналогично D3DTA без префикса D3DTA_. См. D3DTSS_ALPHAARG0. |
AlphaArg1[8] | dword | Аналогично D3DTA без префикса D3DTA_. См. D3DTSS_ALPHAARG1. |
AlphaArg2[8] | dword | Аналогично D3DTA без префикса D3DTA_. См. D3DTSS_ALPHAARG2. |
ColorArg0[8] | dword | Аналогично D3DTA без префикса D3DTA_. См. D3DTSS_COLORARG0. |
ColorArg1[8] | dword | Аналогично D3DTA без префикса D3DTA_. См. D3DTSS_COLORARG1. |
ColorArg2[8] | dword | Аналогично D3DTA без префикса D3DTA_. См. D3DTSS_COLORARG2. |
ColorOp[8] | dword | Аналогично D3DTEXTUREOP без префикса D3DTOP_. См. D3DTSS_COLOROP. |
BumpEnvLScale[8] | FLOAT | Те же значения, что и D3DTSS_BUMPENVLSCALE без префикса D3DTSS_TCI. |
BumpEnvLOffset[8] | FLOAT | Те же значения, что и D3DTSS_BUMPENVLOFFSET без префикса D3DTSS_TCI. |
BumpEnvMat00[8] | FLOAT | Те же значения, что и D3DTSS_BUMPENVMAT00. |
BumpEnvMat01[8] | FLOAT | Те же значения, что и D3DTSS_BUMPENVMAT01. |
BumpEnvMat10[8] | FLOAT | Те же значения, что и D3DTSS_BUMPENVMAT10. |
BumpEnvMat11[8] | FLOAT | Те же значения, что и D3DTSS_BUMPENVMAT11. |
ResultArg[8] | dword | Аналогично D3DTA без префикса D3DTA_. См. D3DTSS_RESULTARG. |
TexCoordIndex[8] | dword | Те же значения, что и D3DTSS_TEXCOORDINDEX без префикса D3DTSS_TCI. |
TextureTransformFlags[8] | dword | Те же значения, что и значения D3DTEXTURETRANSFORMFLAGS без префикса D3DTTFF_. См. D3DTSS_TEXTURETRANSFORMFLAGS. |
Состояния преобразования
Установка состояний преобразования для инициализации матриц преобразования. Эффекты используют транспонированные матрицы для повышения эффективности. Вы можете предоставить эффекту транспонированные матрицы, иначе эффект автоматически транспонирует матрицы перед их использованием.
Состояние преобразования | Тип | Значения |
---|---|---|
ПроекцияТрансформа | float4x4 | Матрица с плавающей запятой 4x4. Те же значения, что и D3DTS_PROJECTION без префикса D3DTS_. |
TextureTransform[8] | float4x4 | Матрица с плавающей запятой 4x4. Те же значения, что и D3DTRANSFORMSTATETYPE без префикса D3DTS_. |
ViewTransform | float4x4 | Матрица с плавающей запятой 4x4. Те же значения, что и D3DTS_VIEW без префикса D3DTS_. |
WorldTransform | float4x4 | Матрица с плавающей запятой 4x4. |