;;; -*- lexical-binding: t -*- ;; ;; ----------------------------------------------------------------------------- ;; this file: ;; https://dataswamp.org/~incal/emacs-init/draw/draw.el ;; ----------------------------------------------------------------------------- (require 'cl-lib) (cl-pushnew "." load-path :test #'string=) (cl-pushnew (file-name-concat ".." "ll") load-path :test #'string=) (require 'luki-lisp) (let ((dm "draw.so")) (load dm nil t) (declare-function sdl2_init dm) (declare-function draw_init dm) (declare-function draw_quit dm) (declare-function draw_draw dm)) (defun buffer-substring-no-properties-in-window () (when-let* ((beg (or (win-beg) (point-min))) (end (or (win-end) (point-max))) (str (buffer-substring-no-properties beg end)) (fbk "No data") (fnl (or (& (su str) str) fbk))) (replace-regexp-in-string "\\(.+\\)$" "\\1\n" fnl))) (defun sdl2-draw-init () (draw_init)) ;; (sdl2-draw-init) (defun sdl2-draw-quit () (draw_quit)) ;; (sdl2-draw-quit) (defun sdl2-draw-draw () (draw_draw)) (defun sdl2-test-fps () (setq current-time-list nil) (pop-buff (get-buffer-create "*fps-test*")) (sdl2-draw-init) (cl-loop with fps = 60 with (beg . hz) = (time-convert nil nil) with frame-ticks = (/ hz fps) with frames = (** 2 8) for f from 1 upto frames for next = (+ beg (* f frame-ticks)) do (erase-buffer) (@i (@f " \n GNU Emacs %d.%d" emacs-major-version emacs-minor-version) (@f "\n with SDL2") (@f "\n frame %d of %d (%.1f%%) \n" f frames (* 100 (// f frames))) (@f "\n %.2f fps\n " (// (* hz f) (- (1st (time-convert nil nil)) beg)))) (sdl2-draw-draw) (sleep-for (// (- next (1st (time-convert nil nil))) hz)) finally (let ((end (- (1st (time-convert nil nil)) beg))) (shell-command "scrot -o \"fps.png\"" t) (sleep-for 8) (sdl2-draw-quit) ($ "%.3f fps" (// (* hz frames) end))))) (defun sdl2-init () (sdl2_init "SDL2 & GNU Emacs")) (<- 'draw)