我正在尝试使用cl-sdl2创建一个窗口。
我的代码有效 - 它会创建一个窗口2秒钟,然后关闭它:
(defun main ()
(sdl2:with-init (:everything)
(sdl2:with-window (win :title "cl-sdl2 sample" :flags '(:shown :fullscreen))
(let ((surf (sdl2:get-window-surface win)))
(sdl2:fill-rect surf nil (sdl2:map-rgb (sdl2:surface-format surf) #xff #xff #xff))
(sdl2:update-window win)
(sdl2:delay 2000)))))
(main)
但是,窗口关闭后,repl(CCL)会卡住。我无法再评估表达式。 为什么会这样,我如何回到正常运作的代表?
就目前而言,每次运行样本进行测试时,我都必须继续产生新的CCL repl进程,这很快就会变得乏味。
我在MacOS Sierra上。
答案 0 :(得分:0)
看起来这是cl-sdl2的已知问题,如下所示:https://github.com/lispgames/cl-sdl2/issues/89
目前提出的解决方法是将repl线程从主线程移出并通过单独的终端上的swank / slime连接到该线程,然后在主线程上运行sdl程序。示例如下所示。
(bt:make-thread (lambda () (swank:create-server :port 4005 :dont-close t)))
(sdl2:make-this-thread-main (lambda () (sdl2.kit:start)))