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;
}
⚠️ **GitHub.com Fallback** ⚠️