2
0
Эх сурвалжийг харах

only try/catch if onShaderError is set (easier debugging)

Nicolas Cannasse 1 жил өмнө
parent
commit
8da624fad4
1 өөрчлөгдсөн 9 нэмэгдсэн , 7 устгасан
  1. 9 7
      h3d/pass/Default.hx

+ 9 - 7
h3d/pass/Default.hx

@@ -90,9 +90,7 @@ class Default extends Base {
 		@:privateAccess p.obj.draw(ctx);
 	}
 
-	static public dynamic function onShaderError(e: Dynamic, p: PassObject) {
-		throw e;
-	}
+	public static var onShaderError : Dynamic -> PassObject -> Void;
 
 	@:access(h3d.scene)
 	override function draw( passes : h3d.pass.PassList, ?sort : h3d.pass.PassList -> Void ) {
@@ -116,11 +114,15 @@ class Default extends Base {
 				globalModelViewInverse = p.obj.getInvPos();
 			if( prevShader != p.shader ) {
 				prevShader = p.shader;
-				try {
+				if( onShaderError != null ) {
+					try {
+						ctx.engine.selectShader(p.shader);
+					} catch(e : Dynamic) {
+						onShaderError(e, p);
+						continue;
+					}
+				} else {
 					ctx.engine.selectShader(p.shader);
-				} catch(e : Dynamic) {
-					onShaderError(e, p);
-					continue;
 				}
 				if( buf == null )
 					buf = ctx.shaderBuffers = new h3d.shader.Buffers(p.shader);