add bgVertexBuffer and bgProgram to imperative shell, so we can draw bg and cursor without overlap, and without z-index

This commit is contained in:
2024-11-15 10:26:22 +00:00
parent d5eb19f8d9
commit 2a2f64f00c
4 changed files with 115 additions and 52 deletions

View File

@@ -9,18 +9,19 @@ structure TextBuilder :> TEXT_BUILDER =
struct struct
open TextConstants open TextConstants
fun accToDrawMsg (textAcc, cursorAcc) = fun accToDrawMsg (textAcc, cursorAcc, bgAcc) =
let let
open MailboxType open MailboxType
open DrawMsg open DrawMsg
val textAcc = Vector.concat textAcc val textAcc = Vector.concat textAcc
val cursorAcc = Vector.concat cursorAcc val bgAcc = Vector.concat bgAcc
val textMsg = REDRAW_TEXT textAcc val textMsg = REDRAW_TEXT textAcc
val cursorMsg = REDRAW_CURSOR cursorAcc val cursorMsg = REDRAW_CURSOR cursorAcc
val bgMsg = REDRAW_BG bgAcc
in in
[DRAW textMsg, DRAW cursorMsg] [DRAW bgMsg, DRAW textMsg, DRAW cursorMsg]
end end
fun buildCursor (posX, posY, fWindowWidth, fWindowHeight, r, g, b) = fun buildCursor (posX, posY, fWindowWidth, fWindowHeight, r, g, b) =
@@ -83,7 +84,7 @@ struct
fun buildTextString fun buildTextString
( pos, str, acc, posX, posY, startX ( pos, str, acc, posX, posY, startX
, tl, absIdx, cursorPos, cursorAcc , tl, absIdx, cursorPos, cursorAcc, bgAcc
, windowData: window_data, colourData: colour_data , windowData: window_data, colourData: colour_data
) = ) =
if pos < String.size str then if pos < String.size str then
@@ -95,7 +96,7 @@ struct
(* not in cursur *) (* not in cursur *)
buildTextString buildTextString
( pos + 1, str, acc, posX + xSpace, posY, startX ( pos + 1, str, acc, posX + xSpace, posY, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
) )
else else
@@ -104,12 +105,11 @@ struct
val {fw, fh, ...} = windowData val {fw, fh, ...} = windowData
val {r, g, b, ...} = colourData val {r, g, b, ...} = colourData
val cursorHd = buildCursor (posX, posY, fw, fh, r, g ,b) val cursorAcc = buildCursor (posX, posY, fw, fh, r, g ,b)
val cursorAcc = cursorHd :: cursorAcc
in in
buildTextString buildTextString
( pos + 1, str, acc, posX + xSpace, posY, startX ( pos + 1, str, acc, posX + xSpace, posY, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
) )
end end
@@ -119,7 +119,7 @@ struct
(* not in cursor position, so iterate like normal *) (* not in cursor position, so iterate like normal *)
buildTextString buildTextString
( pos + 1, str, acc, startX, posY + ySpace, startX ( pos + 1, str, acc, startX, posY + ySpace, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
) )
else else
@@ -128,17 +128,16 @@ struct
val {fw, fh, ...} = windowData val {fw, fh, ...} = windowData
val {r, g, b, ...} = colourData val {r, g, b, ...} = colourData
val cursorHd = buildCursor (posX, posY, fw, fh, r, g ,b) val cursorAcc = buildCursor (posX, posY, fw, fh, r, g ,b)
val cursorAcc = cursorHd :: cursorAcc
in in
buildTextString buildTextString
( pos + 1, str, acc, startX, posY + ySpace, startX ( pos + 1, str, acc, startX, posY + ySpace, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
) )
end end
else else
accToDrawMsg (acc, cursorAcc) accToDrawMsg (acc, cursorAcc, bgAcc)
| chr => | chr =>
let let
val chrFun = Vector.sub (CozetteAscii.asciiTable, Char.ord chr) val chrFun = Vector.sub (CozetteAscii.asciiTable, Char.ord chr)
@@ -156,7 +155,7 @@ struct
in in
buildTextString buildTextString
( pos + 1, str, acc, posX + xSpace, posY, startX ( pos + 1, str, acc, posX + xSpace, posY, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
) )
end end
@@ -173,19 +172,18 @@ struct
in in
buildTextString buildTextString
( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX ( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
) )
end end
else else
accToDrawMsg (acc, cursorAcc) accToDrawMsg (acc, cursorAcc, bgAcc)
else else
(* equal to cursor *) (* equal to cursor *)
let let
val {fw, fh, ...} = windowData val {fw, fh, ...} = windowData
val {r, g, b, hr, hg, hb} = colourData val {r, g, b, hr, hg, hb} = colourData
val cursorHd = buildCursor (posX, posY, fw, fh, r, g ,b) val cursorAcc = buildCursor (posX, posY, fw, fh, r, g ,b)
val cursorAcc = cursorHd :: cursorAcc
in in
if posX + xSpace < #w windowData then if posX + xSpace < #w windowData then
let let
@@ -199,7 +197,7 @@ struct
* since cursor was built *) * since cursor was built *)
buildTextString buildTextString
( pos + 1, str, acc, posX + xSpace, posY, startX ( pos + 1, str, acc, posX + xSpace, posY, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
) )
end end
@@ -215,12 +213,12 @@ struct
* since cursor was built *) * since cursor was built *)
buildTextString buildTextString
( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX ( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
) )
end end
else else
accToDrawMsg (acc, cursorAcc) accToDrawMsg (acc, cursorAcc, bgAcc)
end end
end end
else else
@@ -229,11 +227,11 @@ struct
hd :: tl => hd :: tl =>
buildTextString buildTextString
( 0, hd, acc, posX, posY, startX ( 0, hd, acc, posX, posY, startX
, tl, absIdx, cursorPos, cursorAcc , tl, absIdx, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
) )
| [] => | [] =>
accToDrawMsg (acc, cursorAcc) accToDrawMsg (acc, cursorAcc, bgAcc)
fun isInSearchRange (absIdx, searchPos, searchHd, searchLen) = fun isInSearchRange (absIdx, searchPos, searchHd, searchLen) =
let let
@@ -251,7 +249,7 @@ struct
fun buildTextStringSearch fun buildTextStringSearch
( pos, str, acc, posX, posY, startX ( pos, str, acc, posX, posY, startX
, tl, absIdx, cursorPos, cursorAcc , tl, absIdx, cursorPos, cursorAcc, bgAcc
, windowData: window_data, colourData: colour_data , windowData: window_data, colourData: colour_data
, searchHd, searchTl, searchPos, searchLen , searchHd, searchTl, searchPos, searchLen
) = ) =
@@ -261,15 +259,15 @@ struct
(* go to next search hd/tl *) (* go to next search hd/tl *)
buildTextStringSearch buildTextStringSearch
( pos, str, acc, posX, posY, startX ( pos, str, acc, posX, posY, startX
, tl, absIdx, cursorPos, cursorAcc , tl, absIdx, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
, searchHd, searchTl, 0, searchLen , searchHd, searchTl, 0, searchLen
) )
| [] => | [] =>
(* exhausted search hd/tl so calll normal build function *) (* exhausted search hd/tl so calll normal build function *)
buildTextString buildTextString
( pos, str, acc, posX, posY, startX ( pos, str, acc, posX, posY, startX
, tl, absIdx, cursorPos, cursorAcc , tl, absIdx, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
) )
else if pos < String.size str then else if pos < String.size str then
@@ -289,11 +287,11 @@ struct
val {fw, fh, ...} = windowData val {fw, fh, ...} = windowData
val space = buildCursor (posX, posY, fw, fh, r, g, b) val space = buildCursor (posX, posY, fw, fh, r, g, b)
val cursorAcc = space :: cursorAcc val bgAcc = space :: bgAcc
in in
buildTextStringSearch buildTextStringSearch
( pos + 1, str, acc, posX + xSpace, posY, startX ( pos + 1, str, acc, posX + xSpace, posY, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
, searchHd, searchTl, searchPos, searchLen , searchHd, searchTl, searchPos, searchLen
) )
@@ -301,7 +299,7 @@ struct
else else
buildTextStringSearch buildTextStringSearch
( pos + 1, str, acc, posX + xSpace, posY, startX ( pos + 1, str, acc, posX + xSpace, posY, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
, searchHd, searchTl, searchPos, searchLen , searchHd, searchTl, searchPos, searchLen
) )
@@ -311,12 +309,11 @@ struct
val {fw, fh, ...} = windowData val {fw, fh, ...} = windowData
val {r, g, b, ...} = colourData val {r, g, b, ...} = colourData
val cursorHd = buildCursor (posX, posY, fw, fh, r, g ,b) val cursorAcc = buildCursor (posX, posY, fw, fh, r, g ,b)
val cursorAcc = cursorHd :: cursorAcc
in in
buildTextStringSearch buildTextStringSearch
( pos + 1, str, acc, posX + xSpace, posY, startX ( pos + 1, str, acc, posX + xSpace, posY, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
, searchHd, searchTl, searchPos, searchLen , searchHd, searchTl, searchPos, searchLen
) )
@@ -327,7 +324,7 @@ struct
(* not in cursor position, so iterate like normal *) (* not in cursor position, so iterate like normal *)
buildTextStringSearch buildTextStringSearch
( pos + 1, str, acc, startX, posY + ySpace, startX ( pos + 1, str, acc, startX, posY + ySpace, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
, searchHd, searchTl, searchPos, searchLen , searchHd, searchTl, searchPos, searchLen
) )
@@ -337,18 +334,17 @@ struct
val {fw, fh, ...} = windowData val {fw, fh, ...} = windowData
val {r, g, b, ...} = colourData val {r, g, b, ...} = colourData
val cursorHd = buildCursor (posX, posY, fw, fh, r, g ,b) val cursorAcc = buildCursor (posX, posY, fw, fh, r, g ,b)
val cursorAcc = cursorHd :: cursorAcc
in in
buildTextStringSearch buildTextStringSearch
( pos + 1, str, acc, startX, posY + ySpace, startX ( pos + 1, str, acc, startX, posY + ySpace, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
, searchHd, searchTl, searchPos, searchLen , searchHd, searchTl, searchPos, searchLen
) )
end end
else else
accToDrawMsg (acc, cursorAcc) accToDrawMsg (acc, cursorAcc, bgAcc)
| chr => | chr =>
let let
val chrFun = Vector.sub (CozetteAscii.asciiTable, Char.ord chr) val chrFun = Vector.sub (CozetteAscii.asciiTable, Char.ord chr)
@@ -376,11 +372,11 @@ struct
val b: Real32.real = 0.1 val b: Real32.real = 0.1
val space = buildCursor (posX, posY, fw, fh, r, g, b) val space = buildCursor (posX, posY, fw, fh, r, g, b)
val cursorAcc = space :: cursorAcc val bgAcc = space :: bgAcc
in in
buildTextStringSearch buildTextStringSearch
( pos + 1, str, acc, posX + xSpace, posY, startX ( pos + 1, str, acc, posX + xSpace, posY, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
, searchHd, searchTl, searchPos, searchLen , searchHd, searchTl, searchPos, searchLen
) )
@@ -400,7 +396,7 @@ struct
in in
buildTextStringSearch buildTextStringSearch
( pos + 1, str, acc, posX + xSpace, posY, startX ( pos + 1, str, acc, posX + xSpace, posY, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
, searchHd, searchTl, searchPos, searchLen , searchHd, searchTl, searchPos, searchLen
) )
@@ -418,20 +414,19 @@ struct
in in
buildTextStringSearch buildTextStringSearch
( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX ( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
, searchHd, searchTl, searchPos, searchLen , searchHd, searchTl, searchPos, searchLen
) )
end end
else else
accToDrawMsg (acc, cursorAcc) accToDrawMsg (acc, cursorAcc, bgAcc)
else else
(* equal to cursor *) (* equal to cursor *)
let let
val {fw, fh, ...} = windowData val {fw, fh, ...} = windowData
val {r, g, b, hr, hg, hb} = colourData val {r, g, b, hr, hg, hb} = colourData
val cursorHd = buildCursor (posX, posY, fw, fh, r, g ,b) val cursorAcc = buildCursor (posX, posY, fw, fh, r, g ,b)
val cursorAcc = cursorHd :: cursorAcc
in in
if posX + xSpace < #w windowData then if posX + xSpace < #w windowData then
let let
@@ -445,7 +440,7 @@ struct
* since cursor was built *) * since cursor was built *)
buildTextStringSearch buildTextStringSearch
( pos + 1, str, acc, posX + xSpace, posY, startX ( pos + 1, str, acc, posX + xSpace, posY, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
, searchHd, searchTl, searchPos, searchLen , searchHd, searchTl, searchPos, searchLen
) )
@@ -462,13 +457,13 @@ struct
* since cursor was built *) * since cursor was built *)
buildTextStringSearch buildTextStringSearch
( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX ( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX
, tl, absIdx + 1, cursorPos, cursorAcc , tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
, searchHd, searchTl, searchPos, searchLen , searchHd, searchTl, searchPos, searchLen
) )
end end
else else
accToDrawMsg (acc, cursorAcc) accToDrawMsg (acc, cursorAcc, bgAcc)
end end
end end
else else
@@ -477,12 +472,12 @@ struct
hd :: tl => hd :: tl =>
buildTextStringSearch buildTextStringSearch
( 0, hd, acc, posX, posY, startX ( 0, hd, acc, posX, posY, startX
, tl, absIdx, cursorPos, cursorAcc , tl, absIdx, cursorPos, cursorAcc, bgAcc
, windowData, colourData , windowData, colourData
, searchHd, searchTl, searchPos, searchLen , searchHd, searchTl, searchPos, searchLen
) )
| [] => | [] =>
accToDrawMsg (acc, cursorAcc) accToDrawMsg (acc, cursorAcc, bgAcc)
fun build fun build
( startLine, cursorPos, lineGap: LineGap.t ( startLine, cursorPos, lineGap: LineGap.t
@@ -534,6 +529,7 @@ struct
, hg = 0.219 , hg = 0.219
, hb = 0.25 , hb = 0.25
} }
val cursorAcc = Vector.fromList []
in in
(case #right searchList of (case #right searchList of
searchHd :: searchTl => searchHd :: searchTl =>
@@ -542,7 +538,7 @@ struct
in in
buildTextStringSearch buildTextStringSearch
( startIdx, rStrHd, [], 5, 5, 5 ( startIdx, rStrHd, [], 5, 5, 5
, rStrTl, absIdx, cursorPos, [] , rStrTl, absIdx, cursorPos, cursorAcc, []
, windowData, colourData , windowData, colourData
, searchHd, searchTl, searchPos, String.size searchString , searchHd, searchTl, searchPos, String.size searchString
) )
@@ -550,7 +546,7 @@ struct
| [] => | [] =>
buildTextString buildTextString
( startIdx, rStrHd, [], 5, 5, 5 ( startIdx, rStrHd, [], 5, 5, 5
, rStrTl, absIdx, cursorPos, [] , rStrTl, absIdx, cursorPos, cursorAcc, []
, windowData, colourData , windowData, colourData
)) ))
end end

View File

@@ -3,6 +3,7 @@ sig
datatype t = datatype t =
REDRAW_TEXT of Real32.real vector REDRAW_TEXT of Real32.real vector
| REDRAW_CURSOR of Real32.real vector | REDRAW_CURSOR of Real32.real vector
| REDRAW_BG of Real32.real vector
| YANK of string | YANK of string
end end
@@ -11,5 +12,6 @@ struct
datatype t = datatype t =
REDRAW_TEXT of Real32.real vector REDRAW_TEXT of Real32.real vector
| REDRAW_CURSOR of Real32.real vector | REDRAW_CURSOR of Real32.real vector
| REDRAW_BG of Real32.real vector
| YANK of string | YANK of string
end end

View File

@@ -17,6 +17,10 @@ struct
, cursorProgram: Word32.word , cursorProgram: Word32.word
, cursorDrawLength: int , cursorDrawLength: int
, bgVertexBuffer: Word32.word
, bgProgram: Word32.word
, bgDrawLength: int
, drawMailbox: DrawMsg.t Mailbox.mbox , drawMailbox: DrawMsg.t Mailbox.mbox
, window: MLton.Pointer.t , window: MLton.Pointer.t
} }
@@ -56,6 +60,10 @@ struct
val cursorVertexBuffer = Gles3.createBuffer () val cursorVertexBuffer = Gles3.createBuffer ()
val cursorProgram = createProgram (xyrgbVertexShader, rgbFragmentShader) val cursorProgram = createProgram (xyrgbVertexShader, rgbFragmentShader)
(* create background buffer and program *)
val bgVertexBuffer = Gles3.createBuffer ()
val bgProgram = createProgram (xyrgbVertexShader, rgbFragmentShader)
(* clean up shaders which are no longer needed once progran is linked. *) (* clean up shaders which are no longer needed once progran is linked. *)
val _ = Gles3.deleteShader xyrgbVertexShader val _ = Gles3.deleteShader xyrgbVertexShader
val _ = Gles3.deleteShader rgbFragmentShader val _ = Gles3.deleteShader rgbFragmentShader
@@ -63,9 +71,15 @@ struct
{ textVertexBuffer = textVertexBuffer { textVertexBuffer = textVertexBuffer
, textProgram = textProgram , textProgram = textProgram
, textDrawLength = 0 , textDrawLength = 0
, cursorVertexBuffer = cursorVertexBuffer , cursorVertexBuffer = cursorVertexBuffer
, cursorProgram = cursorProgram , cursorProgram = cursorProgram
, cursorDrawLength = 0 , cursorDrawLength = 0
, bgVertexBuffer = bgVertexBuffer
, bgProgram = bgProgram
, bgDrawLength = 0
, drawMailbox = drawMailbox , drawMailbox = drawMailbox
, window = window , window = window
} }
@@ -80,6 +94,9 @@ struct
, cursorVertexBuffer , cursorVertexBuffer
, cursorProgram , cursorProgram
, cursorDrawLength , cursorDrawLength
, bgVertexBuffer
, bgProgram
, bgDrawLength
, window , window
, drawMailbox , drawMailbox
} = shellState } = shellState
@@ -94,6 +111,9 @@ struct
, cursorVertexBuffer = cursorVertexBuffer , cursorVertexBuffer = cursorVertexBuffer
, cursorProgram = cursorProgram , cursorProgram = cursorProgram
, cursorDrawLength = cursorDrawLength , cursorDrawLength = cursorDrawLength
, bgVertexBuffer = bgVertexBuffer
, bgProgram = bgProgram
, bgDrawLength = bgDrawLength
, drawMailbox = drawMailbox , drawMailbox = drawMailbox
, window = window , window = window
} }
@@ -108,6 +128,9 @@ struct
, cursorVertexBuffer , cursorVertexBuffer
, cursorProgram , cursorProgram
, cursorDrawLength = _ , cursorDrawLength = _
, bgVertexBuffer
, bgProgram
, bgDrawLength
, window , window
, drawMailbox , drawMailbox
} = shellState } = shellState
@@ -122,6 +145,43 @@ struct
, cursorVertexBuffer = cursorVertexBuffer , cursorVertexBuffer = cursorVertexBuffer
, cursorProgram = cursorProgram , cursorProgram = cursorProgram
, cursorDrawLength = newCursorDrawLength , cursorDrawLength = newCursorDrawLength
, bgVertexBuffer = bgVertexBuffer
, bgProgram = bgProgram
, bgDrawLength = bgDrawLength
, drawMailbox = drawMailbox
, window = window
}
end
fun uploadBg (shellState: t, vec) =
let
val
{ textVertexBuffer
, textProgram
, textDrawLength
, cursorVertexBuffer
, cursorProgram
, cursorDrawLength
, bgVertexBuffer
, bgProgram
, bgDrawLength = _
, window
, drawMailbox
} = shellState
val _ = Gles3.bindBuffer bgVertexBuffer
val _ = Gles3.bufferData (vec, Vector.length vec, Gles3.STATIC_DRAW)
val newBgDrawLength = Vector.length vec div 5
in
{ textVertexBuffer = textVertexBuffer
, textProgram = textProgram
, textDrawLength = textDrawLength
, cursorVertexBuffer = cursorVertexBuffer
, cursorProgram = cursorProgram
, cursorDrawLength = cursorDrawLength
, bgVertexBuffer = bgVertexBuffer
, bgProgram = bgProgram
, bgDrawLength = newBgDrawLength
, drawMailbox = drawMailbox , drawMailbox = drawMailbox
, window = window , window = window
} }
@@ -155,9 +215,13 @@ struct
, cursorVertexBuffer , cursorVertexBuffer
, cursorDrawLength , cursorDrawLength
, cursorProgram , cursorProgram
, bgVertexBuffer
, bgProgram
, bgDrawLength
, ... , ...
} = drawObject } = drawObject
val _ = drawXyrgb (bgVertexBuffer, bgProgram, bgDrawLength)
val _ = drawXyrgb (cursorVertexBuffer, cursorProgram, cursorDrawLength) val _ = drawXyrgb (cursorVertexBuffer, cursorProgram, cursorDrawLength)
val _ = drawXyrgb (textVertexBuffer, textProgram, textDrawLength) val _ = drawXyrgb (textVertexBuffer, textProgram, textDrawLength)
in in
@@ -183,6 +247,7 @@ struct
case msg of case msg of
REDRAW_TEXT textVec => uploadText (shellState, textVec) REDRAW_TEXT textVec => uploadText (shellState, textVec)
| REDRAW_CURSOR cursorVec => uploadCursor (shellState, cursorVec) | REDRAW_CURSOR cursorVec => uploadCursor (shellState, cursorVec)
| REDRAW_BG bgVec => uploadBg (shellState, bgVec)
| YANK str => yank (shellState, str) | YANK str => yank (shellState, str)
end end

BIN
shf

Binary file not shown.