浏览代码

added makeShader()

Nicolas Cannasse 4 年之前
父节点
当前提交
c75467f7ca
共有 1 个文件被更改,包括 18 次插入5 次删除
  1. 18 5
      hrt/prefab/Shader.hx

+ 18 - 5
hrt/prefab/Shader.hx

@@ -43,13 +43,10 @@ class Shader extends Prefab {
 		}
 	}
 
-	override function makeInstance(ctx:Context):Context {
-		if(source == null)
-			return ctx;
-		ctx = ctx.clone(this);
+	public function makeShader(ctx:Context,withInit=true) {
 		loadShaderDef(ctx);
 		if(shaderDef == null)
-			return ctx;
+			return null;
 		var shader = new hxsl.DynamicShader(shaderDef.shader);
 		for( v in shaderDef.inits ) {
 			#if !hscript
@@ -58,6 +55,22 @@ class Shader extends Prefab {
 			shader.hscriptSet(v.variable.name, v.value);
 			#end
 		}
+		if( withInit ) {
+			var prev = ctx.custom;
+			ctx.custom = shader;
+			updateInstance(ctx);
+			ctx.custom = prev;
+		}
+		return shader;
+	}
+
+	override function makeInstance(ctx:Context):Context {
+		if(source == null)
+			return ctx;
+		ctx = ctx.clone(this);
+		var shader = makeShader(ctx,false);
+		if( shader == null )
+			return ctx;
 		if(ctx.local2d != null) {
 			var drawable = Std.downcast(ctx.local2d, h2d.Drawable);
 			if (drawable != null) {