add code generation for assets
BIN
assets/models/test_char.m3d
Normal file
BIN
assets/models/yoda.m3d
Normal file
BIN
assets/shaders/gui.frag.spv
Normal file
BIN
assets/shaders/gui.vert.spv
Normal file
BIN
assets/shaders/pbr.frag.spv
Normal file
BIN
assets/shaders/pbr.vert.spv
Normal file
BIN
assets/shaders/quad.frag.spv
Normal file
BIN
assets/shaders/quad.vert.spv
Normal file
BIN
assets/textures/cheesoid.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
assets/textures/ham_smoke.png
Normal file
|
After Width: | Height: | Size: 728 KiB |
BIN
assets/textures/hamster.png
Normal file
|
After Width: | Height: | Size: 961 KiB |
BIN
assets/textures/hog.jpg
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
assets/textures/patamon.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
assets/textures/pattermon.png
Normal file
|
After Width: | Height: | Size: 340 KiB |
BIN
assets/textures/purplemon.png
Normal file
|
After Width: | Height: | Size: 204 KiB |
13
dub.json
@ -24,6 +24,19 @@
|
|||||||
"importPaths": ["src/packer", "src/shared"],
|
"importPaths": ["src/packer", "src/shared"],
|
||||||
"sourcePaths": ["src/packer", "src/shared"],
|
"sourcePaths": ["src/packer", "src/shared"],
|
||||||
"sourceFiles-linux": ["build/libxxhash.a"],
|
"sourceFiles-linux": ["build/libxxhash.a"],
|
||||||
|
"preGenerateCommands-linux": ["./build-vma.sh"],
|
||||||
|
"preGenerateCommands-windows": [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "codegen",
|
||||||
|
"targetType": "executable",
|
||||||
|
"targetPath": "build",
|
||||||
|
"targetName": "Codegen",
|
||||||
|
"importPaths": ["src/codegen", "src/shared"],
|
||||||
|
"sourcePaths": ["src/codegen", "src/shared"],
|
||||||
|
"sourceFiles-linux": ["build/libxxhash.a"],
|
||||||
|
"preGenerateCommands-linux": ["./build-vma.sh"],
|
||||||
|
"preGenerateCommands-windows": [],
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
75
src/codegen/codegen.d
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import aliases;
|
||||||
|
import util;
|
||||||
|
import std.stdio;
|
||||||
|
import std.file;
|
||||||
|
import std.string;
|
||||||
|
import std.path;
|
||||||
|
|
||||||
|
void
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
CreateAssetLookups();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CreateAssetLookups()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
mkdir("src/generated");
|
||||||
|
}
|
||||||
|
catch(Exception e) {}
|
||||||
|
|
||||||
|
string[] dirs;
|
||||||
|
string[][string] file_names;
|
||||||
|
string[][string] base_names;
|
||||||
|
u64[][string] file_hashes;
|
||||||
|
|
||||||
|
foreach(string dir; dirEntries("assets", SpanMode.shallow))
|
||||||
|
{
|
||||||
|
dirs ~= baseName(dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach(dir; dirs)
|
||||||
|
{
|
||||||
|
string[] files;
|
||||||
|
string[] names;
|
||||||
|
foreach(string file; dirEntries("assets/" ~ dir, SpanMode.shallow))
|
||||||
|
{
|
||||||
|
files ~= dir ~ "/" ~ baseName(file);
|
||||||
|
names ~= dir ~ "/" ~ baseName(stripExtension(file));
|
||||||
|
}
|
||||||
|
|
||||||
|
file_names[dir] = files;
|
||||||
|
base_names[dir] = names;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach(dir, names; base_names)
|
||||||
|
{
|
||||||
|
u64[] hashes;
|
||||||
|
foreach(name; names)
|
||||||
|
{
|
||||||
|
hashes ~= Hash(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
file_hashes[dir] = hashes;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto f = File("src/generated/assets.d", "w");
|
||||||
|
|
||||||
|
foreach(dir; dirs)
|
||||||
|
{
|
||||||
|
string asset_type = stripRight(dir, "s").toUpper();
|
||||||
|
|
||||||
|
string file_array = format("static immutable string[] %s_FILES = [\n", asset_type);
|
||||||
|
foreach(file; file_names[dir])
|
||||||
|
{
|
||||||
|
file_array ~= format("\t\"%s\",\n", file);
|
||||||
|
}
|
||||||
|
file_array ~= "];\n\n";
|
||||||
|
|
||||||
|
f.write(file_array);
|
||||||
|
}
|
||||||
|
|
||||||
|
f.close();
|
||||||
|
}
|
||||||
24
src/generated/codegen.d
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
static immutable string[] MODEL_FILES = [
|
||||||
|
"models/test_char.m3d",
|
||||||
|
"models/yoda.m3d",
|
||||||
|
];
|
||||||
|
|
||||||
|
static immutable string[] SHADER_FILES = [
|
||||||
|
"shaders/gui.frag.spv",
|
||||||
|
"shaders/pbr.frag.spv",
|
||||||
|
"shaders/gui.vert.spv",
|
||||||
|
"shaders/quad.frag.spv",
|
||||||
|
"shaders/quad.vert.spv",
|
||||||
|
"shaders/pbr.vert.spv",
|
||||||
|
];
|
||||||
|
|
||||||
|
static immutable string[] TEXTURE_FILES = [
|
||||||
|
"textures/ham_smoke.png",
|
||||||
|
"textures/cheesoid.png",
|
||||||
|
"textures/hog.jpg",
|
||||||
|
"textures/patamon.png",
|
||||||
|
"textures/pattermon.png",
|
||||||
|
"textures/hamster.png",
|
||||||
|
"textures/purplemon.png",
|
||||||
|
];
|
||||||
|
|
||||||
@ -1,7 +1,38 @@
|
|||||||
import std.stdio;
|
import aliases;
|
||||||
|
import std.file;
|
||||||
import util;
|
import util;
|
||||||
|
import assets;
|
||||||
|
|
||||||
|
const u32 FILE_VERSION = 1;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
Log("Hello, World!");
|
if (isDir("build"))
|
||||||
|
{
|
||||||
|
chdir("build");
|
||||||
|
}
|
||||||
|
|
||||||
|
static foreach(file; AssetFiles)
|
||||||
|
{
|
||||||
|
Log(file);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32
|
||||||
|
MagicValue(string str)
|
||||||
|
{
|
||||||
|
assert(str.length == 4, "Magic value must 4 characters");
|
||||||
|
return cast(u32)(cast(u32)(str[0] << 24) | cast(u32)(str[1] << 16) | cast(u32)(str[2] << 8) | cast(u32)(str[3] << 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
FileHeader
|
||||||
|
InitHeader()
|
||||||
|
{
|
||||||
|
FileHeader header = {
|
||||||
|
magic: MagicValue("steg"),
|
||||||
|
file_version: FILE_VERSION,
|
||||||
|
};
|
||||||
|
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,45 @@
|
|||||||
|
import aliases;
|
||||||
|
import std.file;
|
||||||
|
|
||||||
|
struct FileHeader
|
||||||
|
{
|
||||||
|
u32 magic;
|
||||||
|
u32 file_version;
|
||||||
|
u64 asset_counts;
|
||||||
|
u64 asset_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ModelMeta
|
||||||
|
{
|
||||||
|
u64 index_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct TexMeta
|
||||||
|
{
|
||||||
|
u32 w;
|
||||||
|
u32 h;
|
||||||
|
u32 ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum AssetType : u32
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
Shader,
|
||||||
|
Texture,
|
||||||
|
Model,
|
||||||
|
}
|
||||||
|
|
||||||
|
alias AT = AssetType;
|
||||||
|
|
||||||
|
struct AssetInfo
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
ModelMeta model;
|
||||||
|
TexMeta texture;
|
||||||
|
};
|
||||||
|
u64 hash;
|
||||||
|
u64 offset;
|
||||||
|
u64 len;
|
||||||
|
AssetType type;
|
||||||
|
}
|
||||||