   ([^ATerminal screen x y string fg bg]
    (put-string screen (int (rmath/ceil x)) (int (rmath/ceil y)) string fg bg #{}))
   ([^ATerminal screen x y string fg bg styles]
-   (put-string screen (int (rmath/ceil x)) (int (rmath/ceil y)) string fg bg #{} {}))
+   (put-string screen (int (rmath/ceil x)) (int (rmath/ceil y)) string fg bg styles {}))
   ([^ATerminal screen x y string fg bg styles mask-opts]
    {:pre [(clojure.set/superset? #{:underline :bold} styles)]}
    (let [characters (map-indexed (fn [i c] {:c  (str c)

          texture-coords-vertex-attribute (GL20/glGetAttribLocation pgm-id "aTextureCoord")

          ;; We just need one vertex buffer, a texture-mapped quad will suffice for drawing the terminal.
          vx                  (* columns char-width)
          vy                  (* rows char-height)

          {:keys [vao-id
                  vertices-vbo-id
                  vertices-count
                  texture-coords-vbo-id]}
                           (init-buffers vx vy)
          u-MVMatrix                (GL20/glGetUniformLocation pgm-id "uMVMatrix")
          u-PMatrix                 (GL20/glGetUniformLocation pgm-id "uPMatrix")
          u-font                    (GL20/glGetUniformLocation pgm-id "uFont")

      (doseq [[[s underline?] col row]  character-idxs]
        (let [x ^int (* col char-width)
              y ^int (* (inc row) char-height)
              cx (+ 1 x)
              cy (- y (.getDescent font-metrics))]
          ;(log/info s x y)
        (when (not= s " ")
          ;(println "drawing" s "@" x y "underline?" underline?)
          (doto texture-graphics
            (.setColor white)
            (.drawString (str s) cx cy)))
        (when underline?
          (let [y (dec y)]
            (doto texture-graphics
