res refactor progress
This commit is contained in:
parent
60793dbdf2
commit
4cb7006de9
@ -11,7 +11,7 @@ set meta_rebuild_code=1317212284
|
|||||||
::- Meta build
|
::- Meta build
|
||||||
:meta_build
|
:meta_build
|
||||||
if not exist meta.exe (
|
if not exist meta.exe (
|
||||||
echo [Meta build]
|
echo ====== Meta build =====
|
||||||
%meta_build_cmd%
|
%meta_build_cmd%
|
||||||
set "rc=!errorlevel!"
|
set "rc=!errorlevel!"
|
||||||
if !rc! NEQ 0 (
|
if !rc! NEQ 0 (
|
||||||
@ -20,7 +20,7 @@ if not exist meta.exe (
|
|||||||
)
|
)
|
||||||
|
|
||||||
::- Program build
|
::- Program build
|
||||||
echo [Build]
|
echo ======== Build ========
|
||||||
%program_build_cmd%
|
%program_build_cmd%
|
||||||
set "rc=!errorlevel!"
|
set "rc=!errorlevel!"
|
||||||
if !rc! NEQ 0 (
|
if !rc! NEQ 0 (
|
||||||
|
|||||||
@ -467,6 +467,7 @@ String TrimLeft(String s, String pattern)
|
|||||||
while (StringStartsWith(result, pattern))
|
while (StringStartsWith(result, pattern))
|
||||||
{
|
{
|
||||||
result.text += pattern.len;
|
result.text += pattern.len;
|
||||||
|
result.len -= pattern.len;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -486,6 +487,28 @@ String Trim(String s, String pattern)
|
|||||||
return TrimLeft(TrimRight(s, pattern), pattern);
|
return TrimLeft(TrimRight(s, pattern), pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String TrimWhitespace(String s)
|
||||||
|
{
|
||||||
|
b32 stop = 0;
|
||||||
|
while (!stop)
|
||||||
|
{
|
||||||
|
if (StringStartsWith(s, Lit("\n")) || StringStartsWith(s, Lit("\r")) || StringStartsWith(s, Lit(" ")))
|
||||||
|
{
|
||||||
|
s.text += 1;
|
||||||
|
s.len -= 1;
|
||||||
|
}
|
||||||
|
else if (StringEndsWith(s, Lit("\n")) || StringEndsWith(s, Lit("\r")) || StringEndsWith(s, Lit(" ")))
|
||||||
|
{
|
||||||
|
s.len -= 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stop = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Formatting
|
//~ Formatting
|
||||||
|
|
||||||
|
|||||||
@ -87,6 +87,7 @@ b32 StringEndsWith(String str, String substring);
|
|||||||
String TrimLeft(String s, String pattern);
|
String TrimLeft(String s, String pattern);
|
||||||
String TrimRight(String s, String pattern);
|
String TrimRight(String s, String pattern);
|
||||||
String Trim(String s, String pattern);
|
String Trim(String s, String pattern);
|
||||||
|
String TrimWhitespace(String s);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ String list helpers
|
//~ String list helpers
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
//- Dependencies
|
//- Dependencies
|
||||||
@Dep platform
|
@Dep platform
|
||||||
|
@Dep res
|
||||||
|
|
||||||
//- Api
|
//- Api
|
||||||
@IncludeC gpu.h
|
@IncludeC gpu.h
|
||||||
|
|||||||
108
src/meta/meta.c
108
src/meta/meta.c
@ -244,6 +244,8 @@ Enum(L_ParseMode)
|
|||||||
L_ParseMode_ShaderPS,
|
L_ParseMode_ShaderPS,
|
||||||
L_ParseMode_ShaderCS,
|
L_ParseMode_ShaderCS,
|
||||||
L_ParseMode_Startup,
|
L_ParseMode_Startup,
|
||||||
|
L_ParseMode_EmbedDir_StoreName,
|
||||||
|
L_ParseMode_EmbedDir_DirName,
|
||||||
L_ParseMode_DefaultWindowsImpl,
|
L_ParseMode_DefaultWindowsImpl,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -259,6 +261,7 @@ Struct(L_BlobItem)
|
|||||||
{
|
{
|
||||||
L_BlobItem *next;
|
L_BlobItem *next;
|
||||||
String s;
|
String s;
|
||||||
|
String store_name;
|
||||||
String token_file;
|
String token_file;
|
||||||
i64 token_pos;
|
i64 token_pos;
|
||||||
};
|
};
|
||||||
@ -283,6 +286,7 @@ Struct(L_Blob)
|
|||||||
L_BlobItemList pixel_shaders;
|
L_BlobItemList pixel_shaders;
|
||||||
L_BlobItemList compute_shaders;
|
L_BlobItemList compute_shaders;
|
||||||
L_BlobItemList startup_functions;
|
L_BlobItemList startup_functions;
|
||||||
|
L_BlobItemList embed_dirs;
|
||||||
L_BlobItemList default_windows_impls;
|
L_BlobItemList default_windows_impls;
|
||||||
|
|
||||||
L_BlobItemList errors;
|
L_BlobItemList errors;
|
||||||
@ -329,9 +333,18 @@ L_ParseResult L_ParseBlobsFromPaths(Arena *arena, StringList paths)
|
|||||||
L_Blob *blob = PushStruct(arena, L_Blob);
|
L_Blob *blob = PushStruct(arena, L_Blob);
|
||||||
SllQueuePush(result.first_blob, result.last_blob, blob);
|
SllQueuePush(result.first_blob, result.last_blob, blob);
|
||||||
blob->id = result.blobs_count++;
|
blob->id = result.blobs_count++;
|
||||||
for (L_Token *token = tokens.first->next; !token->eof; token = token->next)
|
String store_name = Lit("<None>");
|
||||||
|
for (L_Token *token = tokens.first->next; token; token = token->next)
|
||||||
{
|
{
|
||||||
String s = token->s;
|
String s = token->s;
|
||||||
|
if (token->eof)
|
||||||
|
{
|
||||||
|
if (mode != L_ParseMode_None)
|
||||||
|
{
|
||||||
|
L_PushBlobItem(arena, &blob->errors, file, token->pos, Lit("Unexpected end of file"));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (mode == L_ParseMode_None)
|
if (mode == L_ParseMode_None)
|
||||||
{
|
{
|
||||||
if (EqString(s, Lit("@Layer"))) mode = L_ParseMode_LayerName;
|
if (EqString(s, Lit("@Layer"))) mode = L_ParseMode_LayerName;
|
||||||
@ -342,6 +355,7 @@ L_ParseResult L_ParseBlobsFromPaths(Arena *arena, StringList paths)
|
|||||||
else if (EqString(s, Lit("@ShaderPS"))) mode = L_ParseMode_ShaderPS;
|
else if (EqString(s, Lit("@ShaderPS"))) mode = L_ParseMode_ShaderPS;
|
||||||
else if (EqString(s, Lit("@ShaderCS"))) mode = L_ParseMode_ShaderCS;
|
else if (EqString(s, Lit("@ShaderCS"))) mode = L_ParseMode_ShaderCS;
|
||||||
else if (EqString(s, Lit("@Startup"))) mode = L_ParseMode_Startup;
|
else if (EqString(s, Lit("@Startup"))) mode = L_ParseMode_Startup;
|
||||||
|
else if (EqString(s, Lit("@EmbedDir"))) mode = L_ParseMode_EmbedDir_StoreName;
|
||||||
else if (EqString(s, Lit("@DefaultWindowsImpl"))) mode = L_ParseMode_DefaultWindowsImpl;
|
else if (EqString(s, Lit("@DefaultWindowsImpl"))) mode = L_ParseMode_DefaultWindowsImpl;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -403,6 +417,19 @@ L_ParseResult L_ParseBlobsFromPaths(Arena *arena, StringList paths)
|
|||||||
L_PushBlobItem(arena, &blob->startup_functions, file, token->pos, s);
|
L_PushBlobItem(arena, &blob->startup_functions, file, token->pos, s);
|
||||||
mode = L_ParseMode_None;
|
mode = L_ParseMode_None;
|
||||||
} break;
|
} break;
|
||||||
|
case L_ParseMode_EmbedDir_StoreName:
|
||||||
|
{
|
||||||
|
store_name = s;
|
||||||
|
mode = L_ParseMode_EmbedDir_DirName;
|
||||||
|
} break;
|
||||||
|
case L_ParseMode_EmbedDir_DirName:
|
||||||
|
{
|
||||||
|
String embed_dir_name = s;
|
||||||
|
L_BlobItem *item = L_PushBlobItem(arena, &blob->embed_dirs, file, token->pos, embed_dir_name);
|
||||||
|
item->store_name = PushString(arena, store_name);
|
||||||
|
store_name = Lit("<None>");
|
||||||
|
mode = L_ParseMode_None;
|
||||||
|
} break;
|
||||||
case L_ParseMode_DefaultWindowsImpl:
|
case L_ParseMode_DefaultWindowsImpl:
|
||||||
{
|
{
|
||||||
L_PushBlobItem(arena, &blob->default_windows_impls, file, token->pos, s);
|
L_PushBlobItem(arena, &blob->default_windows_impls, file, token->pos, s);
|
||||||
@ -455,6 +482,7 @@ Struct(L_TopoItem)
|
|||||||
{
|
{
|
||||||
L_TopoItem *next;
|
L_TopoItem *next;
|
||||||
String s;
|
String s;
|
||||||
|
String store_name;
|
||||||
String token_file;
|
String token_file;
|
||||||
i64 token_pos;
|
i64 token_pos;
|
||||||
};
|
};
|
||||||
@ -470,6 +498,7 @@ Struct(L_Topo)
|
|||||||
{
|
{
|
||||||
L_TopoItemList c_includes;
|
L_TopoItemList c_includes;
|
||||||
L_TopoItemList startup_functions;
|
L_TopoItemList startup_functions;
|
||||||
|
L_TopoItemList embed_dirs;
|
||||||
L_TopoItemList errors;
|
L_TopoItemList errors;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -687,6 +716,14 @@ L_Topo L_TopoFromLayerName(Arena *arena, StringList starting_layer_names, String
|
|||||||
String s = PushString(arena, bitem->s);
|
String s = PushString(arena, bitem->s);
|
||||||
L_PushTopoItem(arena, &result.startup_functions, file, bitem->token_pos, s);
|
L_PushTopoItem(arena, &result.startup_functions, file, bitem->token_pos, s);
|
||||||
}
|
}
|
||||||
|
/* Embed dirs */
|
||||||
|
for (L_BlobItem *bitem = blob->embed_dirs.first; bitem; bitem = bitem->next)
|
||||||
|
{
|
||||||
|
String file = PushString(arena, bitem->token_file);
|
||||||
|
String s = PushString(arena, bitem->s);
|
||||||
|
L_TopoItem *titem = L_PushTopoItem(arena, &result.embed_dirs, file, bitem->token_pos, s);
|
||||||
|
titem->store_name = PushString(arena, bitem->store_name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Process errors of untouched blobs */
|
/* Process errors of untouched blobs */
|
||||||
@ -828,7 +865,7 @@ void StartupMeta(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Generate C
|
//- Generate C file
|
||||||
String c_out_file = F_GetFull(arena, Lit("pp_gen.c"));
|
String c_out_file = F_GetFull(arena, Lit("pp_gen.c"));
|
||||||
if (errors.count <= 0)
|
if (errors.count <= 0)
|
||||||
{
|
{
|
||||||
@ -882,7 +919,29 @@ void StartupMeta(void)
|
|||||||
F_ClearWrite(c_out_file, c_out);
|
F_ClearWrite(c_out_file, c_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- Generate archive file
|
||||||
|
String archive_out_file = F_GetFull(arena, Lit("embeds.arc"));
|
||||||
|
{
|
||||||
|
for (L_TopoItem *item = topo.embed_dirs.first; item; item = item->next)
|
||||||
|
{
|
||||||
|
String parent = F_GetParentDir(item->token_file);
|
||||||
|
String dir = StringF(arena, "%F%F", FmtString(parent), FmtString(item->s));
|
||||||
|
if (F_IsDir(dir))
|
||||||
|
{
|
||||||
|
String full = F_GetFull(arena, dir);
|
||||||
|
String line = StringF(arena, "#include \"%F\"", FmtString(full));
|
||||||
|
// PushStringToList(arena, &c_out_lines, line);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String e = StringF(arena, "Dir '%F' not found", FmtString(dir));
|
||||||
|
PushError(arena, &errors, item->token_file, item->token_pos, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//- Echo meta errors
|
//- Echo meta errors
|
||||||
|
i32 ret = errors.count > 0;
|
||||||
for (Error *e = errors.first; e; e = e->next)
|
for (Error *e = errors.first; e; e = e->next)
|
||||||
{
|
{
|
||||||
String s = e->s;
|
String s = e->s;
|
||||||
@ -930,9 +989,7 @@ void StartupMeta(void)
|
|||||||
|
|
||||||
//- Msvc
|
//- Msvc
|
||||||
{
|
{
|
||||||
PushStringToList(arena, &flags_msvc, Lit("-Fe:pp.exe"));
|
|
||||||
PushStringToList(arena, &flags_msvc, Lit("-nologo"));
|
PushStringToList(arena, &flags_msvc, Lit("-nologo"));
|
||||||
PushStringToList(arena, &compiler_flags_msvc, Lit("-Fo:pp_gen.obj"));
|
|
||||||
PushStringToList(arena, &compiler_flags_msvc, Lit("-diagnostics:column"));
|
PushStringToList(arena, &compiler_flags_msvc, Lit("-diagnostics:column"));
|
||||||
|
|
||||||
/* Debug info */
|
/* Debug info */
|
||||||
@ -958,6 +1015,7 @@ void StartupMeta(void)
|
|||||||
{
|
{
|
||||||
PushStringToList(arena, &flags_clang, Lit("-std=c99"));
|
PushStringToList(arena, &flags_clang, Lit("-std=c99"));
|
||||||
PushStringToList(arena, &flags_clang, Lit("-fno-finite-loops"));
|
PushStringToList(arena, &flags_clang, Lit("-fno-finite-loops"));
|
||||||
|
PushStringToList(arena, &flags_clang, Lit("-fno-strict-aliasing"));
|
||||||
PushStringToList(arena, &flags_clang, Lit("-g -gcodeview"));
|
PushStringToList(arena, &flags_clang, Lit("-g -gcodeview"));
|
||||||
PushStringToList(arena, &flags_clang, Lit("-O0"));
|
PushStringToList(arena, &flags_clang, Lit("-O0"));
|
||||||
PushStringToList(arena, &flags_clang, Lit("-msse4.2"));
|
PushStringToList(arena, &flags_clang, Lit("-msse4.2"));
|
||||||
@ -980,6 +1038,43 @@ void StartupMeta(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- Compile C
|
||||||
|
String c_out_obj_file = Lit("pp_gen.obj");
|
||||||
|
if (ret == 0)
|
||||||
|
{
|
||||||
|
Echo(Lit("[Compiling]"));
|
||||||
|
String cmd = StringF(arena,
|
||||||
|
"cl /c %F -Fo:%F %F %F %F %F",
|
||||||
|
FmtString(c_out_file),
|
||||||
|
FmtString(c_out_obj_file),
|
||||||
|
FmtString(StringFromList(arena, flags_msvc, Lit(" "))),
|
||||||
|
FmtString(StringFromList(arena, compiler_flags_msvc, Lit(" "))),
|
||||||
|
FmtString(StringFromList(arena, warning_flags_msvc, Lit(" "))),
|
||||||
|
FmtString(StringFromList(arena, compiler_defs, Lit(" "))));
|
||||||
|
OS_CommandResult result = OS_RunCommand(arena, cmd);
|
||||||
|
String output = TrimWhitespace(result.output);
|
||||||
|
Echo(output);
|
||||||
|
ret = result.code;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Link
|
||||||
|
String exe_file = Lit("pp.exe");
|
||||||
|
if (ret == 0)
|
||||||
|
{
|
||||||
|
Echo(Lit("[Linking]"));
|
||||||
|
String cmd = StringF(arena,
|
||||||
|
"link %F /OUT:%F %F %F",
|
||||||
|
FmtString(c_out_obj_file),
|
||||||
|
FmtString(exe_file),
|
||||||
|
FmtString(StringFromList(arena, flags_msvc, Lit(" "))),
|
||||||
|
FmtString(StringFromList(arena, linker_flags_msvc, Lit(" "))));
|
||||||
|
OS_CommandResult result = OS_RunCommand(arena, cmd);
|
||||||
|
String output = TrimWhitespace(result.output);
|
||||||
|
Echo(output);
|
||||||
|
ret = result.code;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
//- Generate compiler cmds
|
//- Generate compiler cmds
|
||||||
String msvc_cmd_str = ZI;
|
String msvc_cmd_str = ZI;
|
||||||
String clang_cmd_str = ZI;
|
String clang_cmd_str = ZI;
|
||||||
@ -1009,13 +1104,11 @@ void StartupMeta(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- Compile C
|
//- Compile C
|
||||||
i32 ret = errors.count > 0;
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
Echo(Lit("Compiling..."));
|
Echo(Lit("Compiling"));
|
||||||
String cmd_str = msvc_cmd_str;
|
String cmd_str = msvc_cmd_str;
|
||||||
// String cmd_str = clang_cmd_str;
|
// String cmd_str = clang_cmd_str;
|
||||||
OS_CommandResult result = OS_RunCommand(arena, cmd_str);
|
OS_CommandResult result = OS_RunCommand(arena, cmd_str);
|
||||||
ret = result.code;
|
|
||||||
String output = result.output;
|
String output = result.output;
|
||||||
output = Trim(output, Lit("\n"));
|
output = Trim(output, Lit("\n"));
|
||||||
output = Trim(output, Lit("\r"));
|
output = Trim(output, Lit("\r"));
|
||||||
@ -1031,6 +1124,7 @@ void StartupMeta(void)
|
|||||||
}
|
}
|
||||||
ret = result.code;
|
ret = result.code;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ExitNow(ret);
|
ExitNow(ret);
|
||||||
}
|
}
|
||||||
|
|||||||
26
src/pp/pp.c
26
src/pp/pp.c
@ -457,8 +457,8 @@ MergesortCompareFuncDef(EntitySortCmp, arg_a, arg_b, _)
|
|||||||
if (result == 0)
|
if (result == 0)
|
||||||
{
|
{
|
||||||
/* Sort by sprite */
|
/* Sort by sprite */
|
||||||
u64 a_cmp = a->sprite.r.hash;
|
u64 a_cmp = a->sprite.hash;
|
||||||
u64 b_cmp = b->sprite.r.hash;
|
u64 b_cmp = b->sprite.hash;
|
||||||
result = (a_cmp < b_cmp) - (a_cmp > b_cmp);
|
result = (a_cmp < b_cmp) - (a_cmp > b_cmp);
|
||||||
}
|
}
|
||||||
if (result == 0)
|
if (result == 0)
|
||||||
@ -1152,7 +1152,7 @@ void UpdateUser(P_Window *window)
|
|||||||
if (!IsValidAndActive(ent)) continue;
|
if (!IsValidAndActive(ent)) continue;
|
||||||
//if (S_IsTagNil(ent->sprite)) continue;
|
//if (S_IsTagNil(ent->sprite)) continue;
|
||||||
|
|
||||||
S_Tag sprite = ent->sprite;
|
R_Tag sprite = ent->sprite;
|
||||||
|
|
||||||
Entity *parent = EntityFromId(g->ss_blended, ent->parent);
|
Entity *parent = EntityFromId(g->ss_blended, ent->parent);
|
||||||
|
|
||||||
@ -1214,10 +1214,10 @@ void UpdateUser(P_Window *window)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Draw sprite */
|
/* Draw sprite */
|
||||||
if (!S_IsTagNil(sprite))
|
if (!R_IsTagNil(sprite))
|
||||||
{
|
{
|
||||||
S_Sheet *sheet = S_SheetFromTagAsync(sprite);
|
S_Sheet *sheet = S_SheetFromResourceAsync(sprite);
|
||||||
S_Texture *texture = S_TextureFromTagAsync(sprite);
|
S_Texture *texture = S_TextureFromResourceAsync(sprite);
|
||||||
|
|
||||||
/* TODO: Fade in placeholder if texture isn't loaded */
|
/* TODO: Fade in placeholder if texture isn't loaded */
|
||||||
if (sheet->loaded && texture->loaded)
|
if (sheet->loaded && texture->loaded)
|
||||||
@ -1244,8 +1244,8 @@ void UpdateUser(P_Window *window)
|
|||||||
if (HasProp(ent, Prop_TileChunk))
|
if (HasProp(ent, Prop_TileChunk))
|
||||||
{
|
{
|
||||||
Vec2I32 chunk_index = ent->tile_chunk_index;
|
Vec2I32 chunk_index = ent->tile_chunk_index;
|
||||||
S_Tag tile_sprite = S_TagFromName(Lit("sprite/tile.ase"));
|
R_Tag tile_sprite = R_TagFromStore(&GameResources, Lit("sprite/tile.ase"));
|
||||||
S_Texture *tile_texture = S_TextureFromTagAsync(tile_sprite);
|
S_Texture *tile_texture = S_TextureFromResourceAsync(tile_sprite);
|
||||||
if (tile_texture->loaded)
|
if (tile_texture->loaded)
|
||||||
{
|
{
|
||||||
f32 tile_size = 1.f / SIM_TILES_PER_UNIT_SQRT;
|
f32 tile_size = 1.f / SIM_TILES_PER_UNIT_SQRT;
|
||||||
@ -1311,7 +1311,7 @@ void UpdateUser(P_Window *window)
|
|||||||
/* Draw focus arrow */
|
/* Draw focus arrow */
|
||||||
if (ent == local_control || EqId(ent->id, g->debug_following))
|
if (ent == local_control || EqId(ent->id, g->debug_following))
|
||||||
{
|
{
|
||||||
S_Sheet *sheet = S_SheetFromTagAsync(ent->sprite);
|
S_Sheet *sheet = S_SheetFromResourceAsync(ent->sprite);
|
||||||
S_Slice slice = S_SliceFromNameIndex(sheet, Lit("attach.wep"), ent->animation_frame);
|
S_Slice slice = S_SliceFromNameIndex(sheet, Lit("attach.wep"), ent->animation_frame);
|
||||||
Vec2 start = MulXformV2(sprite_xform, slice.center);
|
Vec2 start = MulXformV2(sprite_xform, slice.center);
|
||||||
start = MulXformV2(g->world_to_ui_xf, start);
|
start = MulXformV2(g->world_to_ui_xf, start);
|
||||||
@ -1325,7 +1325,7 @@ void UpdateUser(P_Window *window)
|
|||||||
/* Draw slices */
|
/* Draw slices */
|
||||||
if (!S_IsTagNil(ent->sprite))
|
if (!S_IsTagNil(ent->sprite))
|
||||||
{
|
{
|
||||||
S_Sheet *sheet = S_SheetFromTagAsync(sprite);
|
S_Sheet *sheet = S_SheetFromResourceAsync(sprite);
|
||||||
|
|
||||||
u32 quad_color = Rgba32F(1, 0, 0.5, 1);
|
u32 quad_color = Rgba32F(1, 0, 0.5, 1);
|
||||||
u32 point_color = Rgba32F(1, 0, 0, 1);
|
u32 point_color = Rgba32F(1, 0, 0, 1);
|
||||||
@ -1754,8 +1754,8 @@ void UpdateUser(P_Window *window)
|
|||||||
{
|
{
|
||||||
__profn("Draw crosshair");
|
__profn("Draw crosshair");
|
||||||
Vec2 crosshair_pos = g->ui_cursor;
|
Vec2 crosshair_pos = g->ui_cursor;
|
||||||
S_Tag crosshair = S_TagFromPath(Lit("sprite/crosshair.ase"));
|
R_Tag crosshair = R_TagFromStore(GameResources, Lit("sprite/crosshair.ase"));
|
||||||
S_Texture *t = S_TextureFromTagAsync(crosshair);
|
S_Texture *t = S_TextureFromResourceAsync(crosshair);
|
||||||
Vec2 size = VEC2(t->width, t->height);
|
Vec2 size = VEC2(t->width, t->height);
|
||||||
Xform xf = XformFromTrs(TRS(.t = crosshair_pos, .s = size));
|
Xform xf = XformFromTrs(TRS(.t = crosshair_pos, .s = size));
|
||||||
D_DrawUiRect(g->render_sig, D_UIRECTPARAMS(.xf = xf, .texture = t->gpu_resource));
|
D_DrawUiRect(g->render_sig, D_UIRECTPARAMS(.xf = xf, .texture = t->gpu_resource));
|
||||||
@ -1773,7 +1773,7 @@ void UpdateUser(P_Window *window)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
S_Texture *t = S_TextureFromTagAsync(S_TagFromPath(Lit("sprite/crosshair.ase")));
|
S_Texture *t = S_TextureFromResourceAsync(R_TagFromStore(GameResources, Lit("sprite/crosshair.ase")));
|
||||||
Vec2 size = VEC2(t->width, t->height);
|
Vec2 size = VEC2(t->width, t->height);
|
||||||
Rect cursor_clip = RectFromVec2(g->ui_screen_offset, g->ui_size);
|
Rect cursor_clip = RectFromVec2(g->ui_screen_offset, g->ui_size);
|
||||||
cursor_clip.pos = AddVec2(cursor_clip.pos, MulVec2(size, 0.5f));
|
cursor_clip.pos = AddVec2(cursor_clip.pos, MulVec2(size, 0.5f));
|
||||||
|
|||||||
@ -270,6 +270,11 @@ Struct(SharedUserState)
|
|||||||
|
|
||||||
extern SharedUserState shared_user_state;
|
extern SharedUserState shared_user_state;
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ Resources
|
||||||
|
|
||||||
|
R_DeclStore(GameResources);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Startup
|
//~ Startup
|
||||||
|
|
||||||
|
|||||||
@ -30,16 +30,8 @@
|
|||||||
@IncludeC pp.c
|
@IncludeC pp.c
|
||||||
@IncludeGpu pp_draw.gpu
|
@IncludeGpu pp_draw.gpu
|
||||||
|
|
||||||
//- Shaders
|
//- Embeds
|
||||||
@ShaderVS MaterialVS
|
@EmbedDir GameResources pp_res
|
||||||
@ShaderPS MaterialPS
|
|
||||||
@ShaderCS FloodCS
|
|
||||||
@ShaderVS UiBlitVS
|
|
||||||
@ShaderPS UiBlitPS
|
|
||||||
@ShaderVS UiRectVS
|
|
||||||
@ShaderPS UiRectPS
|
|
||||||
@ShaderVS UiShapeVS
|
|
||||||
@ShaderPS UiShapePS
|
|
||||||
|
|
||||||
//- Startup
|
//- Startup
|
||||||
@Startup StartupSim
|
@Startup StartupSim
|
||||||
|
|||||||
@ -247,7 +247,7 @@ Struct(Entity)
|
|||||||
|
|
||||||
//- Sprite
|
//- Sprite
|
||||||
|
|
||||||
S_Tag sprite;
|
R_Tag sprite;
|
||||||
String sprite_span_name;
|
String sprite_span_name;
|
||||||
u32 sprite_tint;
|
u32 sprite_tint;
|
||||||
Vec3 sprite_emittance;
|
Vec3 sprite_emittance;
|
||||||
|
|||||||
@ -36,7 +36,7 @@ void ResetSimAccel(Snapshot *ss, SimAccel *accel)
|
|||||||
Entity *SpawnTestSmg(Entity *parent)
|
Entity *SpawnTestSmg(Entity *parent)
|
||||||
{
|
{
|
||||||
Entity *e = AcquireSyncSrc(parent);
|
Entity *e = AcquireSyncSrc(parent);
|
||||||
e->sprite = S_TagFromName(Lit("sprite/gun.ase"));
|
e->sprite = R_TagFromStore(&GameResources, Lit("sprite/gun.ase"));
|
||||||
|
|
||||||
EnableProp(e, Prop_Attached);
|
EnableProp(e, Prop_Attached);
|
||||||
e->attach_slice = Lit("attach.wep");
|
e->attach_slice = Lit("attach.wep");
|
||||||
@ -52,7 +52,7 @@ Entity *SpawnTestSmg(Entity *parent)
|
|||||||
Entity *SpawnTestLauncher(Entity *parent)
|
Entity *SpawnTestLauncher(Entity *parent)
|
||||||
{
|
{
|
||||||
Entity *e = AcquireSyncSrc(parent);
|
Entity *e = AcquireSyncSrc(parent);
|
||||||
e->sprite = S_TagFromName(Lit("sprite/gun.ase"));
|
e->sprite = R_TagFromStore(&GameResources, Lit("sprite/gun.ase"));
|
||||||
|
|
||||||
EnableProp(e, Prop_Attached);
|
EnableProp(e, Prop_Attached);
|
||||||
e->attach_slice = Lit("attach.wep");
|
e->attach_slice = Lit("attach.wep");
|
||||||
@ -68,7 +68,7 @@ Entity *SpawnTestLauncher(Entity *parent)
|
|||||||
Entity *SpawnTestChucker(Entity *parent)
|
Entity *SpawnTestChucker(Entity *parent)
|
||||||
{
|
{
|
||||||
Entity *chucker = AcquireSyncSrc(parent);
|
Entity *chucker = AcquireSyncSrc(parent);
|
||||||
chucker->sprite = S_TagFromName(Lit("sprite/gun.ase"));
|
chucker->sprite = R_TagFromStore(&GameResources, Lit("sprite/gun.ase"));
|
||||||
|
|
||||||
EnableProp(chucker, Prop_Attached);
|
EnableProp(chucker, Prop_Attached);
|
||||||
chucker->attach_slice = Lit("attach.wep");
|
chucker->attach_slice = Lit("attach.wep");
|
||||||
@ -119,12 +119,12 @@ Entity *SpawnTestEmployee(Entity *parent)
|
|||||||
|
|
||||||
{
|
{
|
||||||
EnableProp(e, Prop_Test);
|
EnableProp(e, Prop_Test);
|
||||||
e->sprite = S_TagFromName(Lit("sprite/tim.ase"));
|
e->sprite = R_TagFromStore(&GameResources, Lit("sprite/tim.ase"));
|
||||||
e->mass_unscaled = 10;
|
e->mass_unscaled = 10;
|
||||||
e->inertia_unscaled = 5;
|
e->inertia_unscaled = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
//e->sprite = S_TagFromName(Lit("sprite/box_rounded.ase"));
|
//e->sprite = R_TagFromStore(GameResources, Lit("sprite/box_rounded.ase"));
|
||||||
//e->sprite_span_name = Lit("idle.unarmed");
|
//e->sprite_span_name = Lit("idle.unarmed");
|
||||||
//e->sprite_span_name = Lit("idle.one_handed");
|
//e->sprite_span_name = Lit("idle.one_handed");
|
||||||
e->sprite_span_name = Lit("idle.two_handed");
|
e->sprite_span_name = Lit("idle.two_handed");
|
||||||
@ -257,7 +257,7 @@ void SpawnTestEntities2(Entity *parent, Vec2 pos)
|
|||||||
Xform xf = XformFromTrs(TRS(.t = pos, .r = rot, .s = size));
|
Xform xf = XformFromTrs(TRS(.t = pos, .r = rot, .s = size));
|
||||||
SetXform(e, xf);
|
SetXform(e, xf);
|
||||||
|
|
||||||
e->sprite = S_TagFromName(Lit("sprite/tile.ase"));
|
e->sprite = R_TagFromStore(&GameResources, Lit("sprite/tile.ase"));
|
||||||
e->layer = Layer_Shoulders;
|
e->layer = Layer_Shoulders;
|
||||||
|
|
||||||
//e->sprite_tint = Alpha32F(ColorBlue, 0.75);
|
//e->sprite_tint = Alpha32F(ColorBlue, 0.75);
|
||||||
@ -299,7 +299,7 @@ void SpawnTestEntities2(Entity *parent, Vec2 pos)
|
|||||||
Xform xf = XformFromTrs(.t = pos, .r = r, .s = size);
|
Xform xf = XformFromTrs(.t = pos, .r = r, .s = size);
|
||||||
SetXform(e, xf);
|
SetXform(e, xf);
|
||||||
|
|
||||||
e->sprite = S_TagFromName(Lit("sprite/bullet.ase"));
|
e->sprite = R_TagFromStore(GameResources, Lit("sprite/bullet.ase"));
|
||||||
e->sprite_collider_slice = Lit("shape");
|
e->sprite_collider_slice = Lit("shape");
|
||||||
e->layer = Layer_Shoulders;
|
e->layer = Layer_Shoulders;
|
||||||
|
|
||||||
@ -327,7 +327,7 @@ void SpawnTestEntities3(Entity *parent, Vec2 pos)
|
|||||||
Xform xf = XformFromTrs(TRS(.t = pos, .r = r, .s = size));
|
Xform xf = XformFromTrs(TRS(.t = pos, .r = r, .s = size));
|
||||||
SetXform(e, xf);
|
SetXform(e, xf);
|
||||||
|
|
||||||
e->sprite = S_TagFromName(Lit("sprite/box.ase"));
|
e->sprite = R_TagFromStore(&GameResources, Lit("sprite/box.ase"));
|
||||||
e->layer = Layer_Shoulders;
|
e->layer = Layer_Shoulders;
|
||||||
|
|
||||||
e->sprite_tint = ColorRed;
|
e->sprite_tint = ColorRed;
|
||||||
@ -350,8 +350,8 @@ void SpawnTestEntities4(Entity *parent, Vec2 pos)
|
|||||||
Xform xf = XformFromTrs(TRS(.t = pos, .r = r, .s = size));
|
Xform xf = XformFromTrs(TRS(.t = pos, .r = r, .s = size));
|
||||||
SetXform(e, xf);
|
SetXform(e, xf);
|
||||||
|
|
||||||
//e->sprite = S_TagFromName(Lit("sprite/box.ase"));
|
//e->sprite = R_TagFromStore(GameResources, Lit("sprite/box.ase"));
|
||||||
e->sprite = S_TagFromName(Lit("sprite/tile.ase"));
|
e->sprite = R_TagFromStore(&GameResources, Lit("sprite/tile.ase"));
|
||||||
e->layer = Layer_Shoulders;
|
e->layer = Layer_Shoulders;
|
||||||
|
|
||||||
EnableProp(e, Prop_LightTest);
|
EnableProp(e, Prop_LightTest);
|
||||||
@ -380,10 +380,10 @@ void SpawnTestTile(Snapshot *world, Vec2 world_pos)
|
|||||||
SetXform(e, xf);
|
SetXform(e, xf);
|
||||||
|
|
||||||
e->layer = Layer_Walls;
|
e->layer = Layer_Walls;
|
||||||
e->sprite = S_TagFromName(Lit("sprite/tile.ase"));
|
e->sprite = R_TagFromStore(GameResources, Lit("sprite/tile.ase"));
|
||||||
e->sprite_tint = ColorRed;
|
e->sprite_tint = ColorRed;
|
||||||
|
|
||||||
S_Sheet *sheet = S_SheetFromTagAwait(e->sprite);
|
S_Sheet *sheet = S_SheetFromResourceAwait(e->sprite);
|
||||||
e->sprite_local_xform = XformFromTrs(.s = DivVec2(sheet->frame_size, PIXELS_PER_UNIT));
|
e->sprite_local_xform = XformFromTrs(.s = DivVec2(sheet->frame_size, PIXELS_PER_UNIT));
|
||||||
|
|
||||||
EnableProp(e, Prop_Solid);
|
EnableProp(e, Prop_Solid);
|
||||||
@ -783,7 +783,7 @@ CollisionCallbackFuncDef(OnEntityCollision, data, step_ctx)
|
|||||||
{
|
{
|
||||||
Xform xf = XformFromTrs(TRS(.t = point, .r = RandF64FromState(&step_ctx->rand, 0, Tau)));
|
Xform xf = XformFromTrs(TRS(.t = point, .r = RandF64FromState(&step_ctx->rand, 0, Tau)));
|
||||||
Entity *decal = AcquireSyncSrc(root);
|
Entity *decal = AcquireSyncSrc(root);
|
||||||
decal->sprite = S_TagFromName(Lit("sprite/blood.ase"));
|
decal->sprite = R_TagFromStore(&GameResources, Lit("sprite/blood.ase"));
|
||||||
decal->sprite_tint = Rgba32F(1, 1, 1, 0.25f);
|
decal->sprite_tint = Rgba32F(1, 1, 1, 0.25f);
|
||||||
decal->layer = Layer_FloorDecals;
|
decal->layer = Layer_FloorDecals;
|
||||||
SetXform(decal, xf);
|
SetXform(decal, xf);
|
||||||
@ -1249,9 +1249,9 @@ void StepSim(SimStepCtx *ctx)
|
|||||||
{
|
{
|
||||||
Entity *ent = &world->ents[ent_index];
|
Entity *ent = &world->ents[ent_index];
|
||||||
if (!ShouldSimulate(ent)) continue;
|
if (!ShouldSimulate(ent)) continue;
|
||||||
if (S_IsTagNil(ent->sprite)) continue;
|
if (R_IsTagNil(ent->sprite)) continue;
|
||||||
|
|
||||||
S_Sheet *sheet = S_SheetFromTagAwait(ent->sprite);
|
S_Sheet *sheet = S_SheetFromResourceAwait(ent->sprite);
|
||||||
|
|
||||||
/* Update animation */
|
/* Update animation */
|
||||||
{
|
{
|
||||||
@ -1359,8 +1359,8 @@ void StepSim(SimStepCtx *ctx)
|
|||||||
if (!HasProp(ent, Prop_Attached)) continue;
|
if (!HasProp(ent, Prop_Attached)) continue;
|
||||||
|
|
||||||
Entity *parent = EntityFromId(world, ent->parent);
|
Entity *parent = EntityFromId(world, ent->parent);
|
||||||
S_Tag parent_sprite = parent->sprite;
|
R_Tag parent_sprite = parent->sprite;
|
||||||
S_Sheet *parent_sheet = S_SheetFromTagAwait(parent_sprite);
|
S_Sheet *parent_sheet = S_SheetFromResourceAwait(parent_sprite);
|
||||||
|
|
||||||
Xform parent_sprite_xf = parent->sprite_local_xform;
|
Xform parent_sprite_xf = parent->sprite_local_xform;
|
||||||
|
|
||||||
@ -1450,9 +1450,9 @@ void StepSim(SimStepCtx *ctx)
|
|||||||
{
|
{
|
||||||
if (primary_triggered)
|
if (primary_triggered)
|
||||||
{
|
{
|
||||||
S_Tag sprite = ent->sprite;
|
R_Tag sprite = ent->sprite;
|
||||||
u32 animation_frame = ent->animation_frame;
|
u32 animation_frame = ent->animation_frame;
|
||||||
S_Sheet *sheet = S_SheetFromTagAwait(sprite);
|
S_Sheet *sheet = S_SheetFromResourceAwait(sprite);
|
||||||
Xform sprite_local_xform = ent->sprite_local_xform;
|
Xform sprite_local_xform = ent->sprite_local_xform;
|
||||||
S_Slice out_slice = S_SliceFromName(sheet, Lit("out"), animation_frame);
|
S_Slice out_slice = S_SliceFromName(sheet, Lit("out"), animation_frame);
|
||||||
Vec2 rel_pos = MulXformV2(sprite_local_xform, out_slice.center);
|
Vec2 rel_pos = MulXformV2(sprite_local_xform, out_slice.center);
|
||||||
@ -1477,7 +1477,7 @@ void StepSim(SimStepCtx *ctx)
|
|||||||
bullet->local_collider.points[0] = VEC2(0, 0);
|
bullet->local_collider.points[0] = VEC2(0, 0);
|
||||||
bullet->local_collider.count = 1;
|
bullet->local_collider.count = 1;
|
||||||
#else
|
#else
|
||||||
bullet->sprite = S_TagFromName(Lit("sprite/bullet.ase"));
|
bullet->sprite = R_TagFromStore(GameResources, Lit("sprite/bullet.ase"));
|
||||||
bullet->sprite_collider_slice = Lit("shape");
|
bullet->sprite_collider_slice = Lit("shape");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -1499,9 +1499,9 @@ void StepSim(SimStepCtx *ctx)
|
|||||||
{
|
{
|
||||||
if (primary_triggered)
|
if (primary_triggered)
|
||||||
{
|
{
|
||||||
S_Tag sprite = ent->sprite;
|
R_Tag sprite = ent->sprite;
|
||||||
u32 animation_frame = ent->animation_frame;
|
u32 animation_frame = ent->animation_frame;
|
||||||
S_Sheet *sheet = S_SheetFromTagAwait(sprite);
|
S_Sheet *sheet = S_SheetFromResourceAwait(sprite);
|
||||||
Xform sprite_local_xform = ent->sprite_local_xform;
|
Xform sprite_local_xform = ent->sprite_local_xform;
|
||||||
S_Slice out_slice = S_SliceFromName(sheet, Lit("out"), animation_frame);
|
S_Slice out_slice = S_SliceFromName(sheet, Lit("out"), animation_frame);
|
||||||
Vec2 rel_pos = MulXformV2(sprite_local_xform, out_slice.center);
|
Vec2 rel_pos = MulXformV2(sprite_local_xform, out_slice.center);
|
||||||
@ -1673,7 +1673,7 @@ void StepSim(SimStepCtx *ctx)
|
|||||||
Vec2 sprite_hold_pos;
|
Vec2 sprite_hold_pos;
|
||||||
Vec2 sprite_hold_dir;
|
Vec2 sprite_hold_dir;
|
||||||
{
|
{
|
||||||
S_Sheet *sheet = S_SheetFromTagAwait(ent->sprite);
|
S_Sheet *sheet = S_SheetFromResourceAwait(ent->sprite);
|
||||||
S_Slice slice = S_SliceFromName(sheet, Lit("attach.wep"), ent->animation_frame);
|
S_Slice slice = S_SliceFromName(sheet, Lit("attach.wep"), ent->animation_frame);
|
||||||
sprite_hold_pos = slice.center;
|
sprite_hold_pos = slice.center;
|
||||||
sprite_hold_dir = slice.dir;
|
sprite_hold_dir = slice.dir;
|
||||||
|
|||||||
@ -2,7 +2,12 @@
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Tag helpers
|
//~ Tag helpers
|
||||||
|
|
||||||
R_Tag R_TagFromName(String name)
|
b32 R_IsTagNil(R_Tag tag)
|
||||||
|
{
|
||||||
|
return tag.hash == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
R_Tag R_TagFromStore(R_Store *store, String name)
|
||||||
{
|
{
|
||||||
R_Tag result = ZI;
|
R_Tag result = ZI;
|
||||||
return result;
|
return result;
|
||||||
@ -6,10 +6,21 @@ Struct(R_Tag)
|
|||||||
u64 hash;
|
u64 hash;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ Store types
|
||||||
|
|
||||||
|
#define R_DeclStore(name) extern R_Store name
|
||||||
|
|
||||||
|
Struct(R_Store)
|
||||||
|
{
|
||||||
|
i32 _;
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Tag helpers
|
//~ Tag helpers
|
||||||
|
|
||||||
R_Tag R_TagFromName(String name);
|
b32 R_IsTagNil(R_Tag tag);
|
||||||
|
R_Tag R_TagFromStore(R_Store *store, String name);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Resource operations
|
//~ Resource operations
|
||||||
@ -9,36 +9,16 @@ void S_Startup(void)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
//~ Tag helpers
|
|
||||||
|
|
||||||
b32 S_IsTagNil(S_Tag tag)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
S_Tag S_TagFromName(String name)
|
|
||||||
{
|
|
||||||
S_Tag result = ZI;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
S_Tag S_TagFromResource(R_Tag resource)
|
|
||||||
{
|
|
||||||
S_Tag result = ZI;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Texture operations
|
//~ Texture operations
|
||||||
|
|
||||||
S_Texture *S_TextureFromTagAwait(S_Tag tag)
|
S_Texture *S_TextureFromResourceAwait(R_Tag resource)
|
||||||
{
|
{
|
||||||
S_Texture *result = &S_NilTexture;
|
S_Texture *result = &S_NilTexture;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
S_Texture *S_TextureFromTagAsync(S_Tag tag)
|
S_Texture *S_TextureFromResourceAsync(R_Tag resource)
|
||||||
{
|
{
|
||||||
S_Texture *result = &S_NilTexture;
|
S_Texture *result = &S_NilTexture;
|
||||||
return result;
|
return result;
|
||||||
@ -47,13 +27,13 @@ S_Texture *S_TextureFromTagAsync(S_Tag tag)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Sheet operations
|
//~ Sheet operations
|
||||||
|
|
||||||
S_Sheet *S_SheetFromTagAwait(S_Tag tag)
|
S_Sheet *S_SheetFromResourceAwait(R_Tag resource)
|
||||||
{
|
{
|
||||||
S_Sheet *result = &S_NilSheet;
|
S_Sheet *result = &S_NilSheet;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
S_Sheet *S_SheetFromTagAsync(S_Tag tag)
|
S_Sheet *S_SheetFromResourceAsync(R_Tag resource)
|
||||||
{
|
{
|
||||||
S_Sheet *result = &S_NilSheet;
|
S_Sheet *result = &S_NilSheet;
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@ -1,11 +1,3 @@
|
|||||||
////////////////////////////////
|
|
||||||
//~ Tag types
|
|
||||||
|
|
||||||
Struct(S_Tag)
|
|
||||||
{
|
|
||||||
R_Tag r;
|
|
||||||
};
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Texture types
|
//~ Texture types
|
||||||
|
|
||||||
@ -108,24 +100,17 @@ extern S_SharedState S_shared_state;
|
|||||||
|
|
||||||
void S_Startup(void);
|
void S_Startup(void);
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
//~ Tag helpers
|
|
||||||
|
|
||||||
b32 S_IsTagNil(S_Tag tag);
|
|
||||||
S_Tag S_TagFromName(String name);
|
|
||||||
S_Tag S_TagFromResource(R_Tag resource);
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Texture operations
|
//~ Texture operations
|
||||||
|
|
||||||
S_Texture *S_TextureFromTagAwait(S_Tag tag);
|
S_Texture *S_TextureFromResource(R_Tag resource);
|
||||||
S_Texture *S_TextureFromTagAsync(S_Tag tag);
|
S_Texture *S_TextureFromResourceAsync(R_Tag resource);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Sheet operations
|
//~ Sheet operations
|
||||||
|
|
||||||
S_Sheet *S_SheetFromTagAwait(S_Tag tag);
|
S_Sheet *S_SheetFromResourceAwait(R_Tag resource);
|
||||||
S_Sheet *S_SheetFromTagAsync(S_Tag tag);
|
S_Sheet *S_SheetFromResourceAsync(R_Tag resource);
|
||||||
|
|
||||||
S_Span S_SpanFromName(S_Sheet *sheet, String name);
|
S_Span S_SpanFromName(S_Sheet *sheet, String name);
|
||||||
S_Frame S_FrameFromIndex(S_Sheet *sheet, u64 index);
|
S_Frame S_FrameFromIndex(S_Sheet *sheet, u64 index);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user