Question

J'ai une texture2d facilement disponible; J'ai une variable d'échantillonneur de texture de shader qui travaille apparemment et de texture de shader dans laquelle je peux mettre cette texture2d.

Le seul problème est que je ne sais pas comment charger une texture dans un shader dans DirectX11 - et soit Google est inutile, soit c'est juste mon incapacité à construire de bons termes de recherche.

Ce dont j'ai besoin: code qui prendra une texture2d et le chargera dans un shader. Un lien sur la façon de le faire, par exemple.

Quoi qu'il en soit, voici mon code de shader:

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 ;
}

Merci.

Était-ce utile?

La solution

...Si c'est

context.PixelShader.SetShADerresource (TexturesHaDerresourceView, 0);

Je pense que je viens de répondre à ma propre question. Mais pourquoi une valeur de tableau de «0» fonctionne-t-elle?

Autres conseils

J'utilise 2 ressources de shader:

HLSL:

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

CS:

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

D'une manière ou d'une autre, cela fonctionne ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top