Quellcode durchsuchen

fixed automatic ctx creation when running outside of render()

Nicolas Cannasse vor 1 Jahr
Ursprung
Commit
396b6f61cc
1 geänderte Dateien mit 8 neuen und 2 gelöschten Zeilen
  1. 8 2
      h3d/pass/ScreenFx.hx

+ 8 - 2
h3d/pass/ScreenFx.hx

@@ -45,8 +45,12 @@ class ScreenFx<T:h3d.shader.ScreenShader> {
 		shader.flipY = engine.driver.hasFeature(BottomLeftCoords) && engine.getCurrentTarget() != null ? -1 : 1;
 		var shaders = @:privateAccess pass.shaders;
 		var ctx = h3d.impl.RenderContext.get();
-		if( ctx == null )
-			throw "Missing render context";
+		var isNewCtx = false;
+		if( ctx == null ) {
+			isNewCtx = true;
+			ctx = @:privateAccess new h3d.impl.RenderContext();
+			ctx.setCurrent();
+		}
 		var rts = manager.compileShaders(ctx.globals, shaders);
 		engine.selectMaterial(pass);
 		engine.selectShader(rts);
@@ -61,6 +65,8 @@ class ScreenFx<T:h3d.shader.ScreenShader> {
 		engine.uploadShaderBuffers(buffers, Textures);
 		engine.uploadShaderBuffers(buffers, Buffers);
 		primitive.render(engine);
+		if( isNewCtx )
+			ctx.clearCurrent();
 	}
 
 	public function dispose() {