private void Update(EvaluationContext context)
        {
            var text       = Text.GetValue(context);
            var bufferSize = BufferSize.GetValue(context);
            var wrapText   = WrapText.GetValue(context);
            var textOffset = TextOffset.GetValue(context);

            var columns = bufferSize.Width;
            var rows    = bufferSize.Height;

            if (columns <= 0 || rows <= 0)
            {
                return;
            }

            if (string.IsNullOrEmpty(text))
            {
                return;
            }

            var textCycle = (int)textOffset.X + (int)(textOffset.Y) * columns;

            var size = rows * columns;

            if (_bufferContent == null || _bufferContent.Length != size)
            {
                _bufferContent = new BufferLayout[size];
            }

            var index = 0;

            char c;
            var  highlightChars = HighlightCharacters.GetValue(context);

            for (var rowIndex = 0; rowIndex < rows; rowIndex++)
            {
                for (var columnIndex = 0; columnIndex < columns; columnIndex++)
                {
                    if (wrapText)
                    {
                        var i = (index + textCycle) % text.Length;
                        if (i < 0)
                        {
                            i += text.Length;
                        }

                        c = text[i];
                    }
                    else
                    {
                        var i            = index + textCycle;
                        var indexIsValid = i >= 0 && i < text.Length;
                        c = indexIsValid ? text[i] : ' ';
                    }

                    var highlight = highlightChars.IndexOf(c) > -1 ? 1f : 0;      // oh, that's slow!

                    _bufferContent[index] = new BufferLayout(
                        pos: new Vector2((float)columnIndex / columns, 1 - (float)rowIndex / rows),
                        uv: new Vector2(c % 16, (c >> 4)),
                        highlight: highlight);

                    index++;
                }
            }

            ResourceManager.Instance().SetupStructuredBuffer(_bufferContent, ref Buffer.Value);
            Buffer.Value.DebugName = nameof(TypoGridBuffer);

            VertexCount.Value = size * 6;
        }