2012-02-28 78 views
0

我有一個可用的Texture2D;我有一個明顯工作的着色器紋理採樣和着色器紋理變量,我可以把那的Texture2D在如何將紋理加載到着色器(DirectX11/SlimDX)

唯一的問題是,我不知道如何將紋理加載到DirectX11的着色器 - ,要麼是谷歌無益,或者僅僅是我無法構建好搜索條件。

我需要的是:將採用Texture2D並將其加載到着色器中的代碼。例如,關於如何操作的鏈接。

總之,這裏是我的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 ; 
} 

感謝。

回答

2

...如果它是

context.PixelShader.SetShaderResource(TextureShaderResourceView,0);

我想我只是回答了我自己的問題。但爲什麼數組值'0'工作?

+1

0插槽指數 - 在這裏看到(StartSlot )http://msdn.microsoft.com/en-us/library/windows/desktop/ff476473.aspx – 2012-02-29 02:56:39

0

我用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); 

不知它的作品...