Shader - BratokHR/RenderClass-DX9 GitHub Wiki
int cRender.CreatePixelShaderAssemble( char *assemble );
- assemble
- Код шейдера на ассемблере.
Индекс шейдера в векторе класса.
int cRender.CreatePixelShader( char *hlsl, char *function_name = "main" );
- hlsl
- Код шейдера на HLSL.
- function_name
- Название главной функции к шейдере (по-умолчанию: main).
Индекс шейдера в векторе класса.
Применяется шейдер к текстурам при рисовании на вершинный буфер.
void cRender.SetPixelShader( UINT num_ps );
- num_ps
- Индекс шейдера.
Параметры передаются в регистры c0-c12, в float4, т.е. грубо говоря один регистр - 4 параметра.
void cRender.SetConstantPixelShaderF( UINT reg, float par1, float par2 = 0, float par3 = 0, float par4 = 0 );
- reg
- Номер регистра.
- par1 - par4
- Параметры.
cRender render;
int shader;
char HLSL[] = R"(
float4 mainFunc(float2 uv : TEXCOORD) : COLOR
{
float4 color = float4(0, 1, 0, 1);
return color;
}
)";
HRESULT APIENTRY hEndScene( LPDIRECT3DDEVICE9 pDevice )
{
render.CheckObjects( pDevice );
// Заполняем вершинный буфер
if ( render.DrawVertexBegin( 0, 0, 1920, 1080 ) )
{
// Сохранаяем все настройки рендера
UINT state = render.SaveState( ST_FVF | ST_TEXTURE | ST_CONSTANT | ST_SHADER );
// Применяем шейдер
render.SetPixelShader( shader );
// Рисуем вершинный буфер
render.DrawVertexEnd();
// Возвращаем настройки обратно
render.RestartState( state );
}
return pEndScene( pDevice );
}
void initRender()
{
shader = render.CreatePixelShader( hlsl_code, "mainFunc" );
}
void main()
{
render.InitFunction = initRender;
}