MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / Bind

Method Bind

Source/Engine/Graphics/Materials/TerrainMaterialShader.cpp:44–123  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42}
43
44void TerrainMaterialShader::Bind(BindParameters& params)
45{
46 // Prepare
47 auto context = params.GPUContext;
48 auto& view = params.RenderContext.View;
49 auto& drawCall = *params.DrawCall;
50 Span<byte> cb(_cbData.Get(), _cbData.Count());
51 ASSERT_LOW_LAYER(cb.Length() >= sizeof(TerrainMaterialShaderData));
52 auto materialData = reinterpret_cast<TerrainMaterialShaderData*>(cb.Get());
53 cb = cb.Slice(sizeof(TerrainMaterialShaderData));
54 int32 srv = 3;
55
56 // Setup features
57 const bool useLightmap = LightmapFeature::Bind(params, cb, srv);
58
59 // Setup parameters
60 MaterialParameter::BindMeta bindMeta;
61 bindMeta.Context = context;
62 bindMeta.Constants = cb;
63 bindMeta.Input = nullptr;
64 bindMeta.Buffers = params.RenderContext.Buffers;
65 bindMeta.CanSampleDepth = false;
66 bindMeta.CanSampleGBuffer = false;
67 MaterialParams::Bind(params.ParamsLink, bindMeta);
68
69 // Setup material constants
70 {
71 materialData->WorldMatrix.SetMatrixTranspose(drawCall.World);
72 const float scaleX = Float3(drawCall.World.M11, drawCall.World.M12, drawCall.World.M13).Length();
73 const float scaleY = Float3(drawCall.World.M21, drawCall.World.M22, drawCall.World.M23).Length();
74 const float scaleZ = Float3(drawCall.World.M31, drawCall.World.M32, drawCall.World.M33).Length();
75 materialData->WorldInvScale = Float3(
76 scaleX > 0.00001f ? 1.0f / scaleX : 0.0f,
77 scaleY > 0.00001f ? 1.0f / scaleY : 0.0f,
78 scaleZ > 0.00001f ? 1.0f / scaleZ : 0.0f);
79 materialData->WorldDeterminantSign = drawCall.WorldDeterminant ? -1.0f : 1.0f;
80 materialData->PerInstanceRandom = drawCall.PerInstanceRandom;
81 materialData->CurrentLOD = drawCall.Terrain.CurrentLOD;
82 materialData->ChunkSizeNextLOD = drawCall.Terrain.ChunkSizeNextLOD;
83 materialData->TerrainChunkSizeLOD0 = drawCall.Terrain.TerrainChunkSizeLOD0;
84 materialData->HeightmapUVScaleBias = drawCall.Terrain.HeightmapUVScaleBias;
85 materialData->NeighborLOD = drawCall.Terrain.NeighborLOD;
86 materialData->OffsetUV = drawCall.Terrain.OffsetUV;
87 materialData->LightmapArea = *(Float4*)&drawCall.Terrain.LightmapUVsArea;
88 }
89
90 // Bind terrain textures
91 GPUTexture* heightmap, *splatmap0, *splatmap1;
92 drawCall.Terrain.Patch->GetTextures(heightmap, splatmap0, splatmap1);
93 context->BindSR(0, heightmap);
94 context->BindSR(1, splatmap0);
95 context->BindSR(2, splatmap1);
96
97 // Bind constants
98 if (_cb)
99 {
100 context->UpdateCB(_cb, _cbData.Get());
101 context->BindCB(0, _cb);

Callers

nothing calls this directly

Calls 15

BindFunction · 0.85
Float3Class · 0.85
EnumHasAnyFlagsFunction · 0.85
SliceMethod · 0.80
SetMatrixTransposeMethod · 0.80
GetMethod · 0.45
CountMethod · 0.45
LengthMethod · 0.45
GetTexturesMethod · 0.45
BindSRMethod · 0.45
UpdateCBMethod · 0.45
BindCBMethod · 0.45

Tested by

no test coverage detected