yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Theresa FoleyAdd an example for using the reflection API (#5839)1fb79ac4f

master
1.9 KiB88 linesraw
1// raster-simple.slang
2
3struct AssembledVertex
4{
5    float3 position : POSITION;
6    float3 normal   : NORMAL;
7    float2 uv       : TEXCOORD;
8};
9
10struct RasterVertex
11{
12    float3 worldPosition;
13    float3 worldNormal;
14    float2 uv;
15};
16
17struct Model
18{
19    float3x4 modelToWorld;
20    float3x4 modelToWorld_inverseTranspose;
21}
22
23struct Material
24{
25    Texture2D<float3> albedoMap;
26    Texture2D<float3> normalMap;
27    Texture2D<float> glossMap;
28    SamplerState sampler;
29    float2 uvScale;
30    float2 uvBias;
31}
32
33struct Camera
34{
35    float3x4 worldToView;
36    float3x4 worldToView_inverseTranspose;
37
38    float4x4 viewToProj;
39}
40
41struct DirectionalLight
42{
43    float3 intensity;
44    float3 direction;
45}
46
47struct Environment
48{
49    TextureCube environmentMap;
50    DirectionalLight light;
51}
52
53uniform Model                       model;
54uniform ParameterBlock<Material>    material;
55uniform ConstantBuffer<Camera>      camera;
56uniform ParameterBlock<Environment> environment;
57
58[shader("vertex")]
59[require(sm_6_0)]
60void vertexMain(
61    in AssembledVertex assembledVertex : A,
62    out RasterVertex rasterVertex : R,
63    in uint vertexID : SV_VertexID,
64    out float4 projPosition :  SV_Position)
65{
66    float3 worldPosition = mul(model.modelToWorld, float4(assembledVertex.position,1));
67
68    rasterVertex.worldPosition = worldPosition;
69    rasterVertex.worldNormal = mul(model.modelToWorld_inverseTranspose, float4(assembledVertex.normal,0));
70    rasterVertex.uv = assembledVertex.uv;
71
72    float3 viewPosition = mul(camera.worldToView, float4(worldPosition,1));
73    projPosition = mul(camera.viewToProj, float4(viewPosition,1));
74}
75
76[shader("fragment")]
77[require(sm_6_0)]
78float4 fragmentMain(
79    in RasterVertex vertex : R)
80    : SV_Target0
81{
82    float3 normal = vertex.worldNormal;
83
84    float3 albedo = material.albedoMap.Sample(material.sampler, vertex.uv);
85
86    float3 color = albedo * max(0, dot(normal, environment.light.direction));
87    return float4(color, 1);
88}