Browse Source

Fix shader binding when render context is changed during rendering of 2D scene.

TothBenoit 1 year ago
parent
commit
ca5ca72ef8
1 changed files with 7 additions and 1 deletions
  1. 7 1
      h2d/RenderContext.hx

+ 7 - 1
h2d/RenderContext.hx

@@ -86,6 +86,7 @@ class RenderContext extends h3d.impl.RenderContext {
 	var pass : h3d.mat.Pass;
 	var currentShaders : hxsl.ShaderList;
 	var baseShaderList : hxsl.ShaderList;
+	var needInitShaders : Bool;
 	var currentObj : Drawable;
 	var stride : Int;
 	var targetsStack : Array<TargetStackEntry>;
@@ -208,6 +209,7 @@ class RenderContext extends h3d.impl.RenderContext {
 	}
 
 	function initShaders( shaders ) {
+		needInitShaders = false;
 		currentShaders = shaders;
 		compiledShader = output.compileShaders(globals, shaders);
 		var buffers = shaderBuffers;
@@ -761,7 +763,7 @@ class RenderContext extends h3d.impl.RenderContext {
 		var stride = 8;
 		if( hasBuffering() && currentObj != null && (texture != this.texture || stride != this.stride || obj.blendMode != currentObj.blendMode || obj.filter != currentObj.filter) )
 			flush();
-		var shaderChanged = false, paramsChanged = false;
+		var shaderChanged = needInitShaders, paramsChanged = false;
 		var objShaders = obj.shaders;
 		var curShaders = currentShaders.next;
 		while( objShaders != null && curShaders != null ) {
@@ -800,4 +802,8 @@ class RenderContext extends h3d.impl.RenderContext {
 		return true;
 	}
 
+	override function setCurrent() {
+		super.setCurrent();
+		needInitShaders = true;
+	}
 }