#| This file is a part of stoe project. Copyright (c) 2015 Renaud Casenave-Péré (renaud@casenave-pere.fr) |# (uiop:define-package :stoe/engine/gl-utils (:use :cl) (:export #:gl-assert #:gl-restart #:size-of)) (in-package :stoe/engine/gl-utils) (defmacro gl-assert (&body body) `(progn ,@(loop for form in body collect `(prog1 ,form (let ((err-sym (%gl:get-error))) (unless (eq err-sym :zero) (error "The OpenGL command `~a'~%~2iresulted in an error: ~s~%" ',form err-sym))))))) (defmacro gl-restart (form) `(restart-case (gl-assert ,form) (continue () :report "Continue"))) (defun size-of (type) (ecase type (:byte 1) (:unsigned-short 2) (:float 4)))