X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fviews.scm;h=f8e93e282417b80184c6a88780a13621b47a4d7c;hb=31270934f62a3dbaefdf717d559195016e3385d0;hp=9aa3006f54541bd4c33b3d390ef9d8ad75277e60;hpb=0fcd674f524b9977055e7fe1958c7c815bd960a8;p=gacela.git diff --git a/src/views.scm b/src/views.scm index 9aa3006..f8e93e2 100644 --- a/src/views.scm +++ b/src/views.scm @@ -21,6 +21,18 @@ #:use-module ((gacela gl) #:select (glPushMatrix glPopMatrix)) #:use-module (ice-9 optargs)) + +(define default-view (make-hash-table)) + +(define* (draw-meshes #:optional (meshes (hash-map->list (lambda (k v) v) default-view))) + (cond ((not (null? meshes)) + (catch #t + (lambda () (mesh-draw (car meshes))) + (lambda (key . args) #f)) + (draw-meshes (cdr meshes))))) + +(add-extension! draw-meshes 50) + (define-macro (define-view name content) `(begin (hash-set! active-views ',name (lambda () (video:glmatrix-block ,content))) @@ -86,13 +98,20 @@ "property-set!" (set! properties (assoc-set! properties prop-name value)))))))) -(define mesh-properties-set! - (let ((f (record-accessor mesh-type 'properties-set!))) - (lambda (mesh new-properties) - ((f mesh) new-properties)))) +(define (mesh-draw mesh) + (((record-accessor mesh-type 'draw) mesh))) + +(define (mesh-inner-property mesh prop-name) + (((record-accessor mesh-type 'inner-property) mesh) prop-name)) + +(define (mesh-properties mesh) + (((record-accessor mesh-type 'properties) mesh))) + +(define (mesh-properties-set! mesh new-properties) + (((record-accessor mesh-type 'properties-set!) mesh) new-properties)) (define* (show mesh #:optional (view default-view)) - (let ((id (mesh 'inner-property 'id))) + (let ((id (mesh-inner-property mesh 'id))) (if (not (hash-ref view id)) (hash-set! view id mesh))))