Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.97 KB | None | 0 0
  1. ;;;; my-proj.lisp
  2.  
  3. (in-package #:my-proj)
  4.  
  5. ;;
  6. (defparameter *lisp-data* (list (list (v! 0.5 -0.36 0) (v! 0 1 0 1))
  7. (list (v! 0 0.5 0) (v! 1 0 0 1))
  8. (list (v! -0.5 -0.36 0) (v! 0 0 1 1))))
  9. (defparameter *array* nil)
  10. (defparameter *stream* nil)
  11. (defparameter *running* nil)
  12. (defparameter *loop-pos* 0)
  13. (defparameter *sc-gpu-array* nil)
  14. (defparameter *view-port* nil)
  15. (defparameter *theta* .1)
  16. (defparameter *split-counter* 0)
  17. (defparameter *tex-array* nil)
  18. (defparameter *texture* nil)
  19. (defparameter *sampler* nil)
  20. (defparameter *rotate-speed* 3)
  21. (defparameter *num-splits* 0)
  22.  
  23.  
  24. (defun-g vec3-2d-rotate ((thet :float) (vec :vec3))
  25. (v! (dot (v! (cos thet) (* -1 (sin thet)) 0) vec)
  26. (dot (v! (sin thet) (cos thet) 0) vec)
  27. (dot (v! 0 0 1) vec)))
  28.  
  29. (defun-g resize ((vec :vec3) (resize-factor :float))
  30. (v! (* (x vec) resize-factor)
  31. (* (y vec) resize-factor)
  32. (* (z vec) resize-factor)))
  33.  
  34. (defun-g tri-vert ((vert g-pc) &uniform (offset :vec2) (thet :float) (resize-factor :float))
  35. (values (+ (v! (* .1 gl-instance-id) 0 0 0)
  36. (v! offset 0 0)
  37. (v! (vec3-2d-rotate thet (resize (pos vert) resize-factor)) 1))
  38. (col vert)))
  39.  
  40. (defun-g tri-frag ((color :vec4))
  41. color)
  42.  
  43. (def-g-> prog-1 ()
  44. tri-vert tri-frag)
  45.  
  46. (defun make-sampler-from-file (file-name)
  47. (setf *texture* (make-texture (dirt:load-image-to-c-array file-name)))
  48. (setf *sampler* (sample *texture*)))
  49.  
  50. (defun quad-split (loop-pos &optional (x-off 0) (y-off 0) (recursion-depth 0))
  51. (let* ((offset-factor (* .5 (expt .5 recursion-depth)))
  52. (resize-factor (expt .5 *num-splits*)))
  53. (oscilate-rotate loop-pos (v! x-off y-off) resize-factor)
  54. (if (< recursion-depth *num-splits*)
  55. (progn
  56. (quad-split loop-pos (+ x-off offset-factor) y-off (+ 1 recursion-depth))
  57. (quad-split loop-pos (- x-off offset-factor) y-off (+ 1 recursion-depth))
  58. (quad-split loop-pos x-off (+ y-off offset-factor) (+ 1 recursion-depth))
  59. (quad-split loop-pos x-off (- y-off offset-factor) (+ 1 recursion-depth))))))
  60.  
  61. (defun av (vec1 vec2)
  62. (v! (+ (x vec1) (x vec2)) (+ (y vec1) (y vec2))))
  63.  
  64. (defun scale (c vec)
  65. (v! (* c (x vec)) (* c (y vec))))
  66.  
  67. (defun oscilate-rotate (loop-pos offset resize-factor)
  68. (let ((theta loop-pos))
  69. (map-g #'prog-1 *stream*
  70. :offset (av offset (scale .3 (v! (sin (* *rotate-speed* *loop-pos*))
  71. (cos (* *rotate-speed* *loop-pos*)))))
  72. :resize-factor resize-factor
  73. :thet (sin (* 4 theta)))))
  74.  
  75. (defun step-demo ()
  76. (incf *loop-pos* .004)
  77. (incf *split-counter*)
  78. (step-host)
  79. (update-repl-link)
  80. (clear)
  81. (quad-split *loop-pos*)
  82. (swap))
  83.  
  84. (defun run-loop ()
  85. (setf *running* t
  86. ;;*array* *sc-gpu-array*;;
  87. *array* (make-gpu-array *lisp-data* :element-type 'g-pc)
  88. *stream* (make-buffer-stream *array*))
  89. (loop :while (and *running* (not (shutting-down-p))) :do
  90. (continuable (step-demo))))
  91.  
  92. (defun stop-loop ()
  93. (setf *running* nil))
  94.  
  95. ;;; "my-proj" goes here. Hacks and glory await!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement