Pārlūkot izejas kodu

RFX: Rework transitions

lviguier 1 mēnesi atpakaļ
vecāks
revīzija
0e4ce87374
2 mainītis faili ar 15 papildinājumiem un 6 dzēšanām
  1. 6 1
      h3d/impl/RendererFX.hx
  2. 9 5
      h3d/scene/Renderer.hx

+ 6 - 1
h3d/impl/RendererFX.hx

@@ -12,6 +12,11 @@ enum Step {
 	Custom( name : String );
 }
 
+typedef RFXTransition = {
+	var effect : RendererFX;
+	var setFactor : (t : Float) -> Void;
+}
+
 interface RendererFX {
 	public var enabled : Bool;
 	public function start( r : h3d.scene.Renderer ) : Void;
@@ -21,5 +26,5 @@ interface RendererFX {
 
 	// Volumetric RFX
 	public function modulate( t : Float ) : RendererFX;
-	public function transition( r1 : RendererFX, r2 : RendererFX, t : Float ) : RendererFX;
+	public function transition( r1 : RendererFX, r2 : RendererFX ) : RFXTransition;
 }

+ 9 - 5
h3d/scene/Renderer.hx

@@ -289,10 +289,11 @@ class Renderer extends hxd.impl.AnyProps {
 					continue;
 
 				for (e2 in volume2.effects) {
-					var newEffect = e1.transition(e1, e2, volume2.getFactor(ctx.camera.pos));
-					if (newEffect != null) {
-						this.toRemove.push(newEffect);
-						this.effects.push(newEffect);
+					var transition = e1.transition(e1, e2);
+					transition.setFactor(volume2.getFactor(ctx.camera.pos));
+					if (transition != null) {
+						this.toRemove.push(transition.effect);
+						this.effects.push(transition.effect);
 					}
 				}
 			}
@@ -300,7 +301,10 @@ class Renderer extends hxd.impl.AnyProps {
 	}
 
 	public function removeVolumetricEffects() {
-		for (e in toRemove)
+		for (e in toRemove) {
 			effects.remove(e);
+			toRemove.remove(e);
+			e.dispose();
+		}
 	}
 }