Я уже пытался освоить Lisp в этой статье (https://notidealrunner.blogspot.com/2013/01/common-lisp-fedora-17-kde.html). В конце статьи я сказал, что мы попробуем написать OpenGL программу на Lisp. Каким-то чудом это у меня получилось. Читаем ниже.
1. Установка диалекта Lisp (SBCL) на Windows 10
Для начала скачайте SBCL (Steel Bank Common Lisp) с официального сайта проекта по ссылке (https://www.sbcl.org/platform-table.html). На момент написания статьи на сайте доступна версия 2.5.9 Установка SBCL проста: следуйте инструкциям мастера установки. После установки путь до SBCL установится в переменную окружения PATH. Запустите командную строку и выполните команду sbcl --version.
2. Установка менеджера пакетов Quicklisp
Скачайте quicklisp с официального сайта по ссылке (https://beta.quicklisp.org/quicklisp.lisp). Сохраните quicklisp.lisp, например, в папку c:\users\[ваш пользователь]\Downloads\. В командной строке выполните команду sbcl, после этого вы попадёте в командную строку sbcl. Для установки Quicklisp в C:\users\[ваш пользователь]\quicklisp и добавления его загрузку в инициализацию SBCL необходима выполнить следующие команды:
1) (load "c:/users/user/Downloads/quicklisp.lisp") — загрузит файл quicklisp.lisp
2) (quicklisp-quickstart:install) — установит менеджер пакетов
3) (ql:add-to-init-file) - добавит строку загрузки менеджера пакетов quicklisp в c:\users\[ваш пользователь]\.sbclrc
3. Загрузка пакетов OpenGL и SDL 2
В SBCL для работы с OpenGL используют пакет cl-opengl для рисовки графики и для работы с SDL 2 используют пакет sdl2 для создания окна.
1) (ql:quickload "cl-opengl") – для OpenGL
2) (ql:quickload "sdl2") – для SDL 2
4. Пример кода на lisp с использованием OpenGL и SDL
(defpackage #:sdl2-opengl-triangle (:use :cl) (:export :run)) (in-package :sdl2-opengl-triangle) (eval-when (:compile-toplevel :load-toplevel :execute) (ql:quickload '("sdl2" "cl-opengl"))) (defparameter *window-width* 640) (defparameter *window-height* 480) (defun run() (sdl2:with-init (:video) (sdl2:with-window (window :title "OpenGL Triangle" :w *window-width* :h *window-height* :flags '(:opengl :shown)) (let ((context (sdl2:gl-create-context window))) (unwind-protect (progn (sdl2:gl-make-current window context) (gl:viewport 0 0 *window-width* *window-height*) ;; Основной цикл рендеринга (sdl2:with-event-loop (:method :poll) (:quit () t) (:keydown (:keysym keysym) (when (sdl2:scancode= (sdl2:scancode-value keysym) :scancode-escape) (sdl2:push-event :quit))) (:idle () ;; Очистка буфера (gl:clear-color 0.1 0.1 0.1 1.0) (gl:clear :color-buffer-bit) ;; Рисуем треугольник (gl:begin :triangles) (gl:color 1.0 0.0 0.0) ; красный (gl:vertex -0.5 -0.5 0.0) (gl:color 0.0 1.0 0.0) ; зелёный (gl:vertex 0.5 -0.5 0.0) (gl:color 0.0 0.0 1.0) ; синий (gl:vertex 0.0 0.5 0.0) (gl:end) ;; Показываем кадр (sdl2:gl-swap-window window) ;; Ограничиваем FPS (~60) (sdl2:delay 16) ) ) ;; Освобождение контекста (sdl2:gl-delete-context context) ) ) ) ) ) )
5. Скачать SDL2.dll
Прежде чем загружать и запускать пример на Lisp c OpenGL и SDL, вам необходимо скачать последние драйвера для вашей видеокарты, это позволит вам запускать OpenGL приложения и динамическую библиотеку SDL 2 для запуска приложений SDL 2. Скачать SDL 2 можно с официального сайта (https://github.com/libsdl-org/SDL/releases/tag/release-2.30.11). Последняя версия SDL 2 это 2.30.11. Скопируйте SDL2.dll в папку, где у вас установлен SBCL, рядом с файлом sbcl.exe. У меня это папка C:\Program Files\Steel Bank Common Lisp\.
6. Команда загрузки примера кода на Lisp и его запуск
(load "h:/Programming/Projects/lisp/lisp_opengl_p1/sdl-opengl.lisp")
(sdl2-opengl-triangle:run)
Комментариев нет:
Отправить комментарий