forked from Shirakumo/trial
-
Notifications
You must be signed in to change notification settings - Fork 0
/
pipelined-scene.lisp
38 lines (29 loc) · 1.26 KB
/
pipelined-scene.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#|
This file is a part of trial
(c) 2016 Shirakumo http://tymoon.eu (shinmera@tymoon.eu)
Author: Nicolas Hafner <shinmera@tymoon.eu>
|#
(in-package #:org.shirakumo.fraf.trial)
(defclass pipelined-scene (scene pipeline bakable)
())
(defmethod paint ((scene pipelined-scene) target)
(paint-with scene scene))
(defmethod paint ((scene pipelined-scene) (target shader-pass))
(for:for ((element over scene))
(paint-with target element)))
(defmethod enter :after ((entity entity) (scene pipelined-scene))
(register-object-for-pass scene entity))
(defmethod leave :after ((entity entity) (scene pipelined-scene))
;; FIXME: A system for figuring out when we can GC shader programs
;; (deregister-object-for-pass scene entity)
)
(defmethod bake ((scene pipelined-scene))
(pack-pipeline scene *context*)
(for:for ((element over scene))
(register-object-for-pass scene element)))
(defmethod compute-resources ((scene pipelined-scene) resources readying cache)
(compute-resources (objects scene) resources readying cache)
(compute-resources (textures scene) resources readying cache)
(compute-resources (passes scene) resources readying cache))
(defmethod handle :after ((event resize) (scene pipelined-scene))
(resize scene (width event) (height event)))