Как загрузить текстуру в шейдер (DirectX11 / SlimDX) - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть Texture2D, легко доступный; У меня есть явно работающий образец текстуры шейдера и переменная текстуры шейдера, в которую я могу поместить эту Texture2D.

Единственная проблема в том, что я не знаю, как загрузить текстуру в шейдер в DirectX11 - и либо Google бесполезен, либо я просто не могу составить хорошие условия поиска.

Что мне нужно: код, который возьмет Texture2D и загрузит его в шейдер. Ссылка о том, как это сделать, например.

В любом случае, вот мой код шейдера:

cbuffer CameraSet : register(b0)
{
    float4x4 ViewProj ;
} ;
cbuffer MeshSet : register(b1)
{
    float4x4 World ;
    texture2D Texture ;
    SamplerState MeshTextureSampler
    {
        Filter = MIN_MAG_MIP_LINEAR ;
        AddressU = WRAP ;
        AddressV = WRAP ;
    } ;
} ;


struct VShaderOutput
{
    float4 WorldPosition : POSITION ;
    float4 ScreenPosition : SV_POSITION ;
    float2 UV : TEXCOORD;
} ;

VShaderOutput VShader( float4 position : POSITION, float2 uv : TEXCOORD )
{
    VShaderOutput r ;

    r.WorldPosition = mul( position, World ) ;
    r.ScreenPosition = mul( r.WorldPosition, ViewProj ) ;
    r.UV.x = abs( uv.x ) ;
    r.UV.y = abs( uv.y ) ;

    return r ;
}


struct PShaderOutput
{
    float4 SV_Target : SV_TARGET ;
    float SV_Depth : SV_DEPTH ;
};

PShaderOutput PShader( VShaderOutput input )
{
    PShaderOutput r ;

    r.SV_Depth = input.ScreenPosition.z;

    r.SV_Target = Texture.Sample( MeshTextureSampler, input.UV ) ;

    return r ;
}

Спасибо.

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

... Если это

context.PixelShader.SetShaderResource (TextureShaderResourceView, 0);

Кажется, я только что ответил на свой вопрос. Но почему значение массива '0' работает?

0 голосов
/ 08 мая 2016

Я использую 2 шейдера Ресурсы:

HLSL:

Texture2D<float4> Self : register(t0);
Texture2D<float4> Other : register(t1);

CS:

device.ImmediateContext.ComputeShader.SetShaderResource(resourceViewSelf, 0);
device.ImmediateContext.ComputeShader.SetShaderResource(resourceViewOther, 1);

как-то работает ...

...