Last active
December 31, 2021 17:59
-
-
Save inconvergent/9ca554321e4d9dc421244e3467b26f45 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/sbcl --script | |
;do something similar to | |
(load "~/quicklisp/setup.lisp") | |
(ql:quickload :sdl2) | |
(ql:quickload :cl-opengl) | |
(defun debug-log (msg &rest args) | |
"Output and flush MSG to STDOUT with arguments ARGS" | |
(apply #'format t msg args) | |
;; Flush to standard out | |
(finish-output)) | |
(defvar *vs-source* | |
"#version 330 core | |
in vec2 c2d; | |
void main() | |
{ | |
gl_Position = vec4(c2d.x, c2d.y, 0.0, 1.0); | |
}") | |
(defvar *fs-source* | |
"#version 330 core | |
out vec4 FragColor; | |
void main() | |
{ | |
FragColor = vec4(0.0f, 0.5f, 0.2f, 1.0f); | |
}") | |
(defun to-gl-array (seq type &aux (length (length seq)) | |
(arr (gl:alloc-gl-array type length))) | |
(dotimes (i length) | |
(setf (gl:glaref arr i) (aref seq i))) | |
arr) | |
(defun render (program) | |
(let* ((buffers (gl:gen-buffers 2)) | |
(vertex-buffer (elt buffers 0)) | |
(arr (to-gl-array #(1.0 1.0 -1.0 -1.0 1.0 -1.0) :float)) | |
(c2d (gl:get-attrib-location program "c2d"))) | |
(gl:clear :color-buffer) | |
(gl:bind-buffer :array-buffer vertex-buffer) | |
(gl:buffer-data :array-buffer :static-draw arr) | |
(gl:vertex-attrib-pointer c2d 2 :float nil 0 (cffi:null-pointer)) | |
(gl:enable-vertex-attrib-array c2d) | |
(gl:use-program program) | |
(gl:draw-arrays :triangles 0 3) | |
(gl:free-gl-array arr) | |
(gl:disable-vertex-attrib-array c2d) | |
(gl:flush))) | |
(defun make-program () | |
(let ((vs (gl:create-shader :vertex-shader)) | |
(fs (gl:create-shader :fragment-shader)) | |
(program (gl:create-program))) | |
(gl:shader-source vs *vs-source*) | |
(gl:compile-shader vs) | |
(gl:shader-source fs *fs-source*) | |
(gl:compile-shader fs) | |
(debug-log "compile vs: ~D~%" (gl:get-shader-info-log vs)) | |
(debug-log "compile fs: ~D~%" (gl:get-shader-info-log fs)) | |
(gl:attach-shader program vs) | |
(gl:attach-shader program fs) | |
(gl:link-program program) | |
(debug-log "link: ~D~%" (gl:get-program-info-log program)) | |
program)) | |
(defun gl-init () | |
(gl:viewport 0 0 800 600) | |
(gl:load-identity) | |
(gl:clear-color 1.0 0.5 0.5 1.0)) | |
(defun main () | |
"The entry point of our game." | |
(sdl2:with-init (:everything) | |
(volume-utils:debug-log "Using SDL library version: ~D.~D.~D~%" | |
sdl2-ffi:+sdl-major-version+ | |
sdl2-ffi:+sdl-minor-version+ | |
sdl2-ffi:+sdl-patchlevel+) | |
(sdl2:with-window (win :flags '(:shown :opengl )) ; :resizable | |
(sdl2:with-gl-context (gl-context win) | |
(debug-log "Setting up window/gl.~%") | |
(sdl2:gl-make-current win gl-context) | |
(gl-init) | |
(let ((program (make-program))) | |
(sdl2:with-event-loop (:method :poll) | |
(:idle () | |
(render program) | |
(sdl2:gl-swap-window win)) | |
(:quit () t))))))) | |
(main) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment