From 0418c29a160f4c908d76bd19ebeb40571f3d60d4 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sat, 29 Nov 2014 12:30:02 -0500 Subject: render: Add transform stack to render context. * sly/render/context.scm ( - (%make-render-context blend-mode depth-test? texture shader vertex-array) + (%make-render-context blend-mode depth-test? texture shader + vertex-array transform-stack) render-context? (blend-mode render-context-blend-mode %set-render-context-blend-mode!) (depth-test? render-context-depth-test? %set-render-context-depth-test?!) (texture render-context-texture %set-render-context-texture!) (shader render-context-shader %set-render-context-shader!) - (vertex-array render-context-vertex-array %set-render-context-vertex-array!)) + (vertex-array render-context-vertex-array %set-render-context-vertex-array!) + (transform-stack render-context-transform-stack)) -(define (make-render-context) - (%make-render-context #f #f #f #f #f)) +(define (make-null-transform) + (make-transform 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0)) + +(define (make-transform-stack size) + (let ((stack (make-q))) + (do-ec (: i 128) (q-push! stack (make-null-transform))) + stack)) + +(define* (make-render-context #:optional (transform-stack-size 32)) + (%make-render-context #f #f #f #f #f + (make-transform-stack transform-stack-size))) (define (render-context-reset! context) (gl-disable (enable-cap blend)) @@ -105,3 +122,10 @@ (unless (equal? (render-context-vertex-array context) vertex-array) (apply-vertex-array vertex-array) (%set-render-context-vertex-array! context vertex-array))) + +;; emacs: (put 'with-temp-transform 'scheme-indent-function 2) +(define-syntax-rule (with-temp-transform context name body ...) + (let* ((stack (render-context-transform-stack context)) + (name (q-pop! stack))) + (begin body ...) + (q-push! stack name))) -- cgit v1.2.3