protected override void OnApply(CommandEncoder commandEncoder) { if (_dirtyFlags.HasFlag(MeshEffectDirtyFlags.SkinningConstants)) { if (_skinningBuffer != null) { commandEncoder.SetInlineStructuredBuffer(2, _skinningBuffer); } _dirtyFlags &= ~MeshEffectDirtyFlags.SkinningConstants; } if (_dirtyFlags.HasFlag(MeshEffectDirtyFlags.TransformConstants)) { _transformConstants.ViewProjection = _view * _projection; _transformConstantBuffer.UpdateData(ref _transformConstants); commandEncoder.SetInlineConstantBuffer(1, _transformConstantBuffer); _dirtyFlags &= ~MeshEffectDirtyFlags.TransformConstants; } if (_dirtyFlags.HasFlag(MeshEffectDirtyFlags.LightingConstants)) { Matrix4x4.Invert(_view, out var viewInverse); _lightingConstants.CameraPosition = viewInverse.Translation; _lightingConstantBuffer.UpdateData(ref _lightingConstants); commandEncoder.SetInlineConstantBuffer(3, _lightingConstantBuffer); _dirtyFlags &= ~MeshEffectDirtyFlags.LightingConstants; } if (_dirtyFlags.HasFlag(MeshEffectDirtyFlags.PerDrawConstants)) { _perDrawConstantBuffer.UpdateData(ref _perDrawConstants); commandEncoder.SetInlineConstantBuffer(0, _perDrawConstantBuffer); _dirtyFlags &= ~MeshEffectDirtyFlags.PerDrawConstants; } if (_dirtyFlags.HasFlag(MeshEffectDirtyFlags.MaterialsBuffer)) { commandEncoder.SetStaticBuffer(6, _materialsBuffer); _dirtyFlags &= ~MeshEffectDirtyFlags.MaterialsBuffer; } if (_dirtyFlags.HasFlag(MeshEffectDirtyFlags.Textures)) { commandEncoder.SetTextureSet(7, _textures); _dirtyFlags &= ~MeshEffectDirtyFlags.Textures; } if (_dirtyFlags.HasFlag(MeshEffectDirtyFlags.TextureIndicesBuffer)) { commandEncoder.SetStaticBuffer(5, _textureIndicesBuffer); _dirtyFlags &= ~MeshEffectDirtyFlags.TextureIndicesBuffer; } if (_dirtyFlags.HasFlag(MeshEffectDirtyFlags.MaterialIndicesBuffer)) { commandEncoder.SetStaticBuffer(4, _materialIndicesBuffer); _dirtyFlags &= ~MeshEffectDirtyFlags.MaterialIndicesBuffer; } }