diff --git a/shader-entity.lisp b/shader-entity.lisp index 8a174f00..1c281350 100644 --- a/shader-entity.lisp +++ b/shader-entity.lisp @@ -469,6 +469,10 @@ void main(){ (unless (slot-boundp entity 'shader-program) (setf (shader-program entity) (make-shader-program entity)))) +(defmethod (setf c2mop:slot-value-using-class) :after (value (class shader-entity-class) (entity standalone-shader-entity) (slotd buffer-slot-definition)) + (when (allocated-p (shader-program entity)) + (bind value (shader-program entity)))) + (defmethod stage :after ((entity standalone-shader-entity) (area staging-area)) (stage (shader-program entity) area)) diff --git a/shader-pass.lisp b/shader-pass.lisp index 22472f7f..4198176e 100644 --- a/shader-pass.lisp +++ b/shader-pass.lisp @@ -470,6 +470,10 @@ (setf (shaders (shader-program pass)) (shaders (make-shader-program pass))))) +(defmethod (setf c2mop:slot-value-using-class) :after (value (class shader-pass-class) (pass single-shader-pass) (slotd buffer-slot-definition)) + (when (allocated-p (shader-program pass)) + (bind value (shader-program pass)))) + (defmethod stage ((pass single-shader-pass) (area staging-area)) (unless (slot-boundp pass 'shader-program) (setf (shader-program pass) (make-shader-program pass)))