From a7fd8e48422a6fc34a5b10d964e74eba4d3dc17f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Renaud=20Casenave-P=C3=A9r=C3=A9?= Date: Sat, 4 Apr 2015 23:42:56 +0200 Subject: [PATCH] Handle the shader lambda-list (preamble) --- src/render/shader/glsl.lisp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/render/shader/glsl.lisp b/src/render/shader/glsl.lisp index b852d5a..2975aeb 100644 --- a/src/render/shader/glsl.lisp +++ b/src/render/shader/glsl.lisp @@ -104,9 +104,15 @@ the forms comprised of these keywords will be printed in comments." first (walk-1 first)) (walk-list rest))) -(defun glsl-compile (lambda-list body) - (declare (ignore lambda-list)) - (format nil "~%~a~%void main ()~%{~%~a}~%" +(defun handle-preamble (form) + "Handle a preamble declaration." + (format nil "~@[layout (location = ~a) ~]~@[~(~a~) ~]~(~a~) ~(~a~) ~(~a~);~%" + (awhen (member :location form) (cadr it)) + (awhen (member :interp form) (cadr it)) + (third form) (second form) (glsl-name (first form)))) +(defun glsl-compile (lambda-list body) + (format nil "~a~%~%~{~a~}~%void main ()~%{~%~a}~%" + (mapcar #'handle-preamble lambda-list) (let ((*current-indent* 2)) (walk `(progn ,body) *form-handlers* #'default-handler *env*))))