|
@@ -5,6 +5,8 @@ typedef ShaderDef = {
|
|
var inits : Array<{ v : hxsl.Ast.TVar, e : hxsl.Ast.TExpr }>;
|
|
var inits : Array<{ v : hxsl.Ast.TVar, e : hxsl.Ast.TExpr }>;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+typedef ShaderDefCache = Map<String, ShaderDef>;
|
|
|
|
+
|
|
class ContextShared {
|
|
class ContextShared {
|
|
public var root2d : h2d.Sprite;
|
|
public var root2d : h2d.Sprite;
|
|
public var root3d : h3d.scene.Object;
|
|
public var root3d : h3d.scene.Object;
|
|
@@ -12,6 +14,7 @@ class ContextShared {
|
|
public var references : Map<Prefab,Array<Context>>;
|
|
public var references : Map<Prefab,Array<Context>>;
|
|
public var cleanups : Array<Void->Void>;
|
|
public var cleanups : Array<Void->Void>;
|
|
var cache : h3d.prim.ModelCache;
|
|
var cache : h3d.prim.ModelCache;
|
|
|
|
+ var shaderCache : ShaderDefCache;
|
|
#if editor
|
|
#if editor
|
|
var scene : hide.comp.Scene;
|
|
var scene : hide.comp.Scene;
|
|
public function getScene() {
|
|
public function getScene() {
|
|
@@ -26,6 +29,7 @@ class ContextShared {
|
|
references = new Map();
|
|
references = new Map();
|
|
cache = new h3d.prim.ModelCache();
|
|
cache = new h3d.prim.ModelCache();
|
|
cleanups = [];
|
|
cleanups = [];
|
|
|
|
+ shaderCache = new ShaderDefCache();
|
|
}
|
|
}
|
|
|
|
|
|
public function elements() {
|
|
public function elements() {
|
|
@@ -42,6 +46,19 @@ class ContextShared {
|
|
return ret.concat(ctxs);
|
|
return ret.concat(ctxs);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ public function loadShader(path: String) : ShaderDef {
|
|
|
|
+ var r = shaderCache.get(path);
|
|
|
|
+ if(r != null)
|
|
|
|
+ return r;
|
|
|
|
+ var cl = Type.resolveClass(path.split("/").join("."));
|
|
|
|
+ var shader = new hxsl.SharedShader(Reflect.field(cl, "SRC"));
|
|
|
|
+ r = {
|
|
|
|
+ shader: shader,
|
|
|
|
+ inits: [] };
|
|
|
|
+ shaderCache.set(path, r);
|
|
|
|
+ return r;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
class Context {
|
|
class Context {
|
|
@@ -118,7 +135,7 @@ class Context {
|
|
#if editor
|
|
#if editor
|
|
return hide.Ide.inst.shaderLoader.loadSharedShader(name);
|
|
return hide.Ide.inst.shaderLoader.loadSharedShader(name);
|
|
#else
|
|
#else
|
|
- return null;
|
|
|
|
|
|
+ return shared.loadShader(name);
|
|
#end
|
|
#end
|
|
}
|
|
}
|
|
public function locateObject( path : String ) {
|
|
public function locateObject( path : String ) {
|