structure AAA = struct fun xToNdc (xOffset, xpos, scale, halfWidth) = ((xpos * scale + xOffset) - halfWidth) / halfWidth fun endXToNdc (xOffset, startX, endX, scale, halfWidth) = (((endX - startX) * scale + xOffset) - halfWidth) / halfWidth fun yToNdc (yOffset, ypos, scale, halfHeight) = ~(((ypos * scale + yOffset) - halfHeight) / halfHeight) fun endYToNdc (yOffset, startY, endY, scale, halfHeight) = ~((((endY - startY) * scale + yOffset) - halfHeight) / halfHeight) fun lerp (xOffset, yOffset, scale, windowWidth, windowHeight) = let val windowWidth = Real32.fromInt windowWidth val halfWidth = windowWidth / 2.0 val windowHeight = Real32.fromInt windowHeight val halfHeight = windowHeight / 2.0 in #[ xToNdc (xOffset, 1.000000000000000, scale, halfWidth), yToNdc (yOffset, 2.000000000000000, scale, halfHeight), 0.000000000000000, 0.000000000000000, 0.000000000000000, endXToNdc (xOffset, xToNdc (xOffset, 1.000000000000000, scale, halfWidth), 1.000000000000000, scale, halfWidth), yToNdc (yOffset, 2.000000000000000, scale, halfHeight), 0.000000000000000, 0.000000000000000, 0.000000000000000, xToNdc (xOffset, 1.000000000000000, scale, halfWidth), yToNdc (yOffset, 1.000000000000000, scale, halfHeight), 0.000000000000000, 0.000000000000000, 0.000000000000000, xToNdc (xOffset, 1.000000000000000, scale, halfWidth), yToNdc (yOffset, 1.000000000000000, scale, halfHeight), 0.000000000000000, 0.000000000000000, 0.000000000000000, endXToNdc (xOffset, xToNdc (xOffset, 1.000000000000000, scale, halfWidth), 1.000000000000000, scale, halfWidth), yToNdc (yOffset, 2.000000000000000, scale, halfHeight), 0.000000000000000, 0.000000000000000, 0.000000000000000, endXToNdc (xOffset, xToNdc (xOffset, 1.000000000000000, scale, halfWidth), 1.000000000000000, scale, halfWidth), yToNdc (yOffset, 1.000000000000000, scale, halfHeight), 0.000000000000000, 0.000000000000000, 0.000000000000000 ] end end