Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 28 additions & 7 deletions Sources/kha/internal/AssetsBuilder.hx
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,17 @@ import haxe.macro.Context;
import haxe.macro.Expr;
#if macro
import sys.io.File;
import sys.FileSystem;
#end

using StringTools;

class AssetsBuilder {
#if macro
public static var files: Array<Dynamic>;
@:persistent static var cache: Map<String, {time: Float, fields: Array<Field>}> = [];
@:persistent static var files: Array<Dynamic>;
@:persistent static var filesTime: Float = 0.0;
static var debug = false;
#end

public static function findResources(): String {
Expand Down Expand Up @@ -51,18 +55,31 @@ class AssetsBuilder {
}

macro static public function build(type: String): Array<Field> {
var fields = Context.getBuildFields();
if (files == null) {
var content = Json.parse(File.getContent(findResources() + "files.json"));
final fields = Context.getBuildFields();
final resPath = findResources() + "files.json";
Context.registerModuleDependency(Context.getLocalModule(), resPath);

final time = FileSystem.stat(resPath).mtime.getTime();
if (cache[type] != null && cache[type].time == time) {
return cache[type].fields;
}

if (files == null || filesTime != time) {
final content = Json.parse(File.getContent(resPath));
files = content.files;
filesTime = time;
if (debug)
trace("reparse files.json (Assets)");
}
if (debug)
trace('invalidate Assets.$type');

var names = new Array<Expr>();
final names = new Array<Expr>();

for (file in files) {
var name = file.name;
final name = file.name;
final pos = Context.currentPos();
var filesize: Int = file.file_sizes[0];
final filesize: Int = file.file_sizes[0];

if (file.type == type) {
names.push(macro $v{name});
Expand Down Expand Up @@ -210,6 +227,10 @@ class AssetsBuilder {
kind: FVar(macro : Array<String>, macro $a{names}),
pos: Context.currentPos()
});
cache[type] = {
fields: fields,
time: time,
};

return fields;
}
Expand Down
25 changes: 18 additions & 7 deletions Sources/kha/internal/ShadersBuilder.hx
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,32 @@ import haxe.macro.Expr.Field;
import haxe.Serializer;
#if macro
import sys.io.File;
import sys.FileSystem;
#end

using StringTools;

class ShadersBuilder {
#if macro
public static var files: Array<Dynamic>;
@:persistent static var cache: {time: Float, fields: Array<Field>} = null;
static var debug = false;
#end

macro static public function build(): Array<Field> {
var fields = Context.getBuildFields();

var manifestPath = AssetsBuilder.findResources() + "files.json";
var content = Json.parse(File.getContent(manifestPath));

final fields = Context.getBuildFields();
final manifestPath = AssetsBuilder.findResources() + "files.json";
// rebuild Shaders module whenever manifest file is changed
Context.registerModuleDependency(Context.getLocalModule(), manifestPath);

files = content.files;
final time = FileSystem.stat(manifestPath).mtime.getTime();
if (cache != null && time == cache.time) {
return cache.fields;
}

final content = Json.parse(File.getContent(manifestPath));
final files: Array<Dynamic> = content.files;
if (debug)
trace("invalidate Shaders");

var init = macro {};

Expand Down Expand Up @@ -204,6 +211,10 @@ class ShadersBuilder {
}),
pos: Context.currentPos()
});
cache = {
fields: fields,
time: time,
};

return fields;
}
Expand Down
Loading