From 8bbef6b1f8fe61ae8b0f24693af28b7fa6e68237 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Thu, 21 Aug 2025 21:45:38 -0400 Subject: pke: embed shaders in executable --- Makefile | 32 ++++++++++++++++---------------- assets/shaders/3d.frag | 20 ++++++++++++++++++++ assets/shaders/3d.vert | 31 +++++++++++++++++++++++++++++++ assets/shaders/texture.frag | 20 -------------------- assets/shaders/vertex.vert | 31 ------------------------------- embed/embedded-file.h | 4 +++- embed/embedded-fonts.c | 4 ++-- embed/embedded-shaders.c | 24 ++++++++++++++++++++++++ embed/embedded-shaders.h | 19 +++++++++++++++++++ src/asset-manager.cpp | 34 +++++++++++----------------------- src/asset-manager.hpp | 8 ++------ src/asset-types.h | 7 +++++++ src/project.cpp | 5 +++-- src/window.cpp | 21 +++++++++++---------- 14 files changed, 149 insertions(+), 111 deletions(-) create mode 100644 assets/shaders/3d.frag create mode 100644 assets/shaders/3d.vert delete mode 100644 assets/shaders/texture.frag delete mode 100644 assets/shaders/vertex.vert create mode 100644 embed/embedded-shaders.c create mode 100644 embed/embedded-shaders.h create mode 100644 src/asset-types.h diff --git a/Makefile b/Makefile index 6685083..ea46f58 100644 --- a/Makefile +++ b/Makefile @@ -60,13 +60,25 @@ $(1): $(2) $(CC) -std=c2x -O3 -c $$< -o $$@ endef -FLG_PKE = -Isub/imgui -Isub/stb -Isub/cgltf -Isub/bullet3/src +FLG_PKE = -Iembed -Isub/imgui -Isub/stb -Isub/cgltf -Isub/bullet3/src FLG_EDT = $(FLG_PKE) -Isrc -Isub/msdfgen -Isub/msdf-atlas-gen FLG_MPL = $(FLG_PKE) -Isrc FLG_RUN = $(FLG_PKE) -Isrc FLG_TST = $(FLG_PKE) -Isrc +DST_SHADERS = \ + $(DIR_OBJ)/shaders/3d.frag.spv \ + $(DIR_OBJ)/shaders/3d.vert.spv \ + $(DIR_OBJ)/shaders/glyph.frag.spv \ + $(DIR_OBJ)/shaders/glyph.vert.spv \ + $(DIR_OBJ)/shaders/present.frag.spv \ + $(DIR_OBJ)/shaders/present.vert.spv \ + $(DIR_OBJ)/shaders/ui-base.frag.spv \ + $(DIR_OBJ)/shaders/ui-base.vert.spv \ + $(DIR_OBJ)/shaders/ui-txtr.frag.spv \ + FILES_BIN = \ + $(DST_SHADERS) \ assets/fonts/font-mannequin.png \ assets/fonts/font-mannequin.glyph \ @@ -86,24 +98,12 @@ $(foreach f,$(FILES_BIN_SAFE), \ ) \ ) -DST_SHADERS = \ - $(DIR_OBJ)/shaders/vertex.vert.spv \ - $(DIR_OBJ)/shaders/present.vert.spv \ - $(DIR_OBJ)/shaders/texture.frag.spv \ - $(DIR_OBJ)/shaders/present.frag.spv \ - $(DIR_OBJ)/shaders/glyph.vert.spv \ - $(DIR_OBJ)/shaders/glyph.frag.spv \ - $(DIR_OBJ)/shaders/ui-base.vert.spv \ - $(DIR_OBJ)/shaders/ui-base.frag.spv \ - $(DIR_OBJ)/shaders/ui-txtr.frag.spv \ - .PHONY: default default: options .WAIT $(DIR_OBJ)/libpke-editor.$(OBJ_EXT) $(DIR_OBJ)/libpke-example.$(LIB_EXT) $(DIR_EXE)/pke-runtime ; .PHONY: prepare prepare: config.h prepare: config.mk -prepare: $(FILES_BIN_GCH) prepare: mkdir -p $(DIR_EXE) mkdir -p $(DIR_OBJ)/shaders @@ -136,7 +136,7 @@ $(DIR_OBJ)/shaders/%.frag.spv: assets/shaders/%.frag | prepare $(DIR_OBJ)/%.$(OBJ_EXT) : src/%.c | prepare $(cc-command) $(FLG_PKE) -$(DIR_OBJ)/%.$(OBJ_EXT) : embed/%.c | prepare +$(DIR_OBJ)/%.$(OBJ_EXT) : embed/%.c | prepare $(FILES_BIN_GCH) $(cc-command) $(FLG_PKE) $(DIR_OBJ)/%.$(OBJ_EXT) : editor/%.c | prepare $(cc-command) $(FLG_PKE) @@ -145,7 +145,7 @@ $(DIR_OBJ)/%.$(OBJ_EXT) : tests/%.c | prepare $(DIR_OBJ)/%.$(OBJ_EXT) : src/%.cpp | prepare $(cxx-command) $(FLG_PKE) -$(DIR_OBJ)/%.$(OBJ_EXT) : embed/%.cpp | prepare +$(DIR_OBJ)/%.$(OBJ_EXT) : embed/%.cpp | prepare $(FILES_BIN_GCH) $(cxx-command) $(FLG_PKE) $(DIR_OBJ)/%.$(OBJ_EXT) : editor/%.cpp | prepare $(cxx-command) $(FLG_EDT) @@ -185,7 +185,6 @@ $(DIR_OBJ)/libmsdf-atlas-gen.$(LIB_EXT): prepare ar rc $@ sub/msdf-atlas-gen/$(DIR_OBJ)/*.$(OBJ_EXT) ranlib $@ -$(DIR_OBJ)/libpke.$(LIB_EXT): $(DST_SHADERS) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/arg-handler.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/asset-manager.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/audio.$(OBJ_EXT) @@ -195,6 +194,7 @@ $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/camera.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/dynamic-array.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/ecs.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/embedded-fonts.$(OBJ_EXT) +$(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/embedded-shaders.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/entities.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/font.$(OBJ_EXT) $(DIR_OBJ)/libpke.$(LIB_EXT): $(DIR_OBJ)/game-settings.$(OBJ_EXT) diff --git a/assets/shaders/3d.frag b/assets/shaders/3d.frag new file mode 100644 index 0000000..9859bb6 --- /dev/null +++ b/assets/shaders/3d.frag @@ -0,0 +1,20 @@ +# version 450 + +layout(location = 0) in vec4 fragColor; +layout(location = 1) in vec3 fragTexCoord; + +layout(location = 0) out vec4 outColor; + +layout(binding = 1) uniform sampler2D texSampler; + +void main() { + vec4 color = texture(texSampler, fragTexCoord.xy); +/* + if (color.w == 0) { + discard; + } +*/ + outColor = color; + // outColor = vec4(0.0, 0.8, 0.0, 1.0); + // outColor = vec4(fragTexCoord.xyz, 1.0); +} diff --git a/assets/shaders/3d.vert b/assets/shaders/3d.vert new file mode 100644 index 0000000..8b2c133 --- /dev/null +++ b/assets/shaders/3d.vert @@ -0,0 +1,31 @@ +#version 450 + +layout(binding = 0) uniform UniformBufferObject { + mat4 model; + mat4 view; + mat4 proj; +} ubo; + +// vertex +// layout(location = 0) in vec4 inColor; +layout(location = 0) in vec3 inPosition; +layout(location = 1) in vec3 inNorm; +layout(location = 2) in vec2 inUV; + +// instance +layout(location = 3) in mat4 instPosRotScale; + +// output +layout(location = 0) out vec4 fragColor; +layout(location = 1) out vec3 fragTexCoord; + +void main() { + gl_Position = + ubo.proj * + ubo.view * + ubo.model * + instPosRotScale * + vec4(inPosition, 1.0); + fragColor = vec4(0.0, 0.0, 0.0, 0.0); + fragTexCoord = vec3(inUV, 0); +} diff --git a/assets/shaders/texture.frag b/assets/shaders/texture.frag deleted file mode 100644 index 9859bb6..0000000 --- a/assets/shaders/texture.frag +++ /dev/null @@ -1,20 +0,0 @@ -# version 450 - -layout(location = 0) in vec4 fragColor; -layout(location = 1) in vec3 fragTexCoord; - -layout(location = 0) out vec4 outColor; - -layout(binding = 1) uniform sampler2D texSampler; - -void main() { - vec4 color = texture(texSampler, fragTexCoord.xy); -/* - if (color.w == 0) { - discard; - } -*/ - outColor = color; - // outColor = vec4(0.0, 0.8, 0.0, 1.0); - // outColor = vec4(fragTexCoord.xyz, 1.0); -} diff --git a/assets/shaders/vertex.vert b/assets/shaders/vertex.vert deleted file mode 100644 index 8b2c133..0000000 --- a/assets/shaders/vertex.vert +++ /dev/null @@ -1,31 +0,0 @@ -#version 450 - -layout(binding = 0) uniform UniformBufferObject { - mat4 model; - mat4 view; - mat4 proj; -} ubo; - -// vertex -// layout(location = 0) in vec4 inColor; -layout(location = 0) in vec3 inPosition; -layout(location = 1) in vec3 inNorm; -layout(location = 2) in vec2 inUV; - -// instance -layout(location = 3) in mat4 instPosRotScale; - -// output -layout(location = 0) out vec4 fragColor; -layout(location = 1) out vec3 fragTexCoord; - -void main() { - gl_Position = - ubo.proj * - ubo.view * - ubo.model * - instPosRotScale * - vec4(inPosition, 1.0); - fragColor = vec4(0.0, 0.0, 0.0, 0.0); - fragTexCoord = vec3(inUV, 0); -} diff --git a/embed/embedded-file.h b/embed/embedded-file.h index 85f2a34..504225c 100644 --- a/embed/embedded-file.h +++ b/embed/embedded-file.h @@ -1,10 +1,12 @@ #ifndef PKE_EMBED_EMBEDDED_FILE_H #define PKE_EMBED_EMBEDDED_FILE_H +#include "../src/asset-types.h" + #include struct embedded_file { - const char *name; + AssetKey name; const unsigned char *data; const size_t size; }; diff --git a/embed/embedded-fonts.c b/embed/embedded-fonts.c index ca85d91..187072f 100644 --- a/embed/embedded-fonts.c +++ b/embed/embedded-fonts.c @@ -4,6 +4,6 @@ #include "../assets/fonts/font_mannequin_glyph.h" const struct embedded_file embedded_fonts[] = { - { "fnt_mquin_img\0\0", assets_fonts_font_mannequin_png, assets_fonts_font_mannequin_png_len }, - { "fnt_mquin_gly\0\0", assets_fonts_font_mannequin_glyph, assets_fonts_font_mannequin_glyph_len }, + { "fnt_mquin_img\0", assets_fonts_font_mannequin_png, assets_fonts_font_mannequin_png_len }, + { "fnt_mquin_gly\0", assets_fonts_font_mannequin_glyph, assets_fonts_font_mannequin_glyph_len }, }; diff --git a/embed/embedded-shaders.c b/embed/embedded-shaders.c new file mode 100644 index 0000000..5e0a71a --- /dev/null +++ b/embed/embedded-shaders.c @@ -0,0 +1,24 @@ + +#include "embedded-shaders.h" + +#include "../../obj/shaders/3d_frag_spv.h" +#include "../../obj/shaders/3d_vert_spv.h" +#include "../../obj/shaders/glyph_frag_spv.h" +#include "../../obj/shaders/glyph_vert_spv.h" +#include "../../obj/shaders/present_frag_spv.h" +#include "../../obj/shaders/present_vert_spv.h" +#include "../../obj/shaders/ui_base_frag_spv.h" +#include "../../obj/shaders/ui_base_vert_spv.h" +#include "../../obj/shaders/ui_txtr_frag_spv.h" + +const struct embedded_file embedded_shaders[] = { + { "shdr-3d-frag\0\0\0\0", obj_shaders_3d_frag_spv, obj_shaders_3d_frag_spv_len, }, + { "shdr-3d-vert\0\0\0\0", obj_shaders_3d_vert_spv, obj_shaders_3d_vert_spv_len, }, + { "shdr-glyph-frag\0", obj_shaders_glyph_frag_spv, obj_shaders_glyph_frag_spv_len, }, + { "shdr-glyph-vert\0", obj_shaders_glyph_vert_spv, obj_shaders_glyph_vert_spv_len, }, + { "shdr-prsnt-frag\0", obj_shaders_present_frag_spv, obj_shaders_present_frag_spv_len, }, + { "shdr-prsnt-vert\0", obj_shaders_present_vert_spv, obj_shaders_present_vert_spv_len, }, + { "shdr-ui-bs-frag\0", obj_shaders_ui_base_frag_spv, obj_shaders_ui_base_frag_spv_len, }, + { "shdr-ui-bs-vert\0", obj_shaders_ui_base_vert_spv, obj_shaders_ui_base_vert_spv_len, }, + { "shdr-ui-tx-frag\0", obj_shaders_ui_txtr_frag_spv, obj_shaders_ui_txtr_frag_spv_len, }, +}; diff --git a/embed/embedded-shaders.h b/embed/embedded-shaders.h new file mode 100644 index 0000000..94869e2 --- /dev/null +++ b/embed/embedded-shaders.h @@ -0,0 +1,19 @@ +#ifndef PKE_EMBED_EMBEDDED_SHADERS_H +#define PKE_EMBED_EMBEDDED_SHADERS_H + +#include "embedded-file.h" + +#define embedded_shader_index_3d_frag 0 +#define embedded_shader_index_3d_vert 1 +#define embedded_shader_index_glyph_frag 2 +#define embedded_shader_index_glyph_vert 3 +#define embedded_shader_index_present_frag 4 +#define embedded_shader_index_present_vert 5 +#define embedded_shader_index_ui_base_frag 6 +#define embedded_shader_index_ui_base_vert 7 +#define embedded_shader_index_ui_texture_frag 8 +#define embedded_shader_index_count 9 + +extern const struct embedded_file embedded_shaders[]; + +#endif /* PKE_EMBED_EMBEDDED_SHADERS_H */ diff --git a/src/asset-manager.cpp b/src/asset-manager.cpp index 7d595ce..5eef783 100644 --- a/src/asset-manager.cpp +++ b/src/asset-manager.cpp @@ -1,6 +1,7 @@ #include "asset-manager.hpp" +#include "embedded-shaders.h" #include "pk.h" #include "thread-pool.hpp" @@ -14,30 +15,13 @@ struct Asset_Master { ThreadPoolHandle thread_pool = ThreadPoolHandle_MAX; } asset_mstr; -AssetKey EngineDefinedAssets[EngineDefinedAssetCount] = { - "pke_prsnt_vrt\0\0", - "pke_prsnt_frg\0\0", - "pke_txtr_vrt\0\0\0", - "pke_txtr_frg\0\0\0", - "pke_glyph_vrt\0\0", - "pke_glyph_frg\0\0", - "pke_ui_bs_vrt\0\0", - "pke_ui_bs_frg\0\0", - "pke_ui_txt_frg\0", -}; - void AM_Init() { + int i; new (&asset_mstr.bc) pk_bkt_arr_t{ pk_bkt_arr_handle_MAX_constexpr }; asset_mstr.thread_pool = PkeThreads_Init(2, 255); - AM_Register(EngineDefinedAssets[0], PKE_ASSET_TYPE_SHADER, "assets/shaders/present.vert.spv", nullptr); - AM_Register(EngineDefinedAssets[1], PKE_ASSET_TYPE_SHADER, "assets/shaders/present.frag.spv", nullptr); - AM_Register(EngineDefinedAssets[2], PKE_ASSET_TYPE_SHADER, "assets/shaders/vertex.vert.spv", nullptr); - AM_Register(EngineDefinedAssets[3], PKE_ASSET_TYPE_SHADER, "assets/shaders/texture.frag.spv", nullptr); - AM_Register(EngineDefinedAssets[4], PKE_ASSET_TYPE_SHADER, "assets/shaders/glyph.vert.spv", nullptr); - AM_Register(EngineDefinedAssets[5], PKE_ASSET_TYPE_SHADER, "assets/shaders/glyph.frag.spv", nullptr); - AM_Register(EngineDefinedAssets[6], PKE_ASSET_TYPE_SHADER, "assets/shaders/ui-base.vert.spv", nullptr); - AM_Register(EngineDefinedAssets[7], PKE_ASSET_TYPE_SHADER, "assets/shaders/ui-base.frag.spv", nullptr); - AM_Register(EngineDefinedAssets[8], PKE_ASSET_TYPE_SHADER, "assets/shaders/ui-txtr.frag.spv", nullptr); + for (i = 0; i < embedded_shader_index_count; ++i) { + AM_Register_Static(embedded_shaders[i].name, PKE_ASSET_TYPE_SHADER, embedded_shaders[i].data, embedded_shaders[i].size, nullptr); + } } void AM_Load_Task(Asset &asset) { @@ -256,6 +240,10 @@ void AM_GC() { auto asset_iter_fn = [](void *user_data, void *arr_obj_data) { (void)user_data; Asset &asset = *reinterpret_cast(arr_obj_data); + if (PK_HAS_FLAG(asset.flags, PKE_ASSET_FLAGS_MEM_STATIC)) { + fprintf(stdout, "[AM_GC] Asset '%.16s' is static, skipping.", asset.key); + return; + } switch (asset.state) { case PKE_ASSET_LOADING_STATE_LOADING: fprintf(stdout, "[AM_GC] Asset '%.16s' is still loading.", asset.key); @@ -267,7 +255,7 @@ void AM_GC() { fprintf(stdout, "[AM_GC] Asset '%.16s' still in use, count: %i\n", asset.key, asset.referenceCount); return; } - if (asset.ptr != nullptr && asset.ptr != CAFE_BABE(void) && !PK_HAS_FLAG(asset.flags, PKE_ASSET_FLAGS_MEM_STATIC)) { + if (asset.ptr != nullptr && asset.ptr != CAFE_BABE(void)) { pk_delete_base(asset.ptr, asset.size); fprintf(stdout, "[AM_GC] Asset '%.16s' not in use, freeing.\n", asset.key); } @@ -280,7 +268,7 @@ void AM_GC() { } void AM_Teardown() { + PkeThreads_Teardown(asset_mstr.thread_pool); AM_GC(); pk_bkt_arr_teardown(&asset_mstr.bc); - PkeThreads_Teardown(asset_mstr.thread_pool); } diff --git a/src/asset-manager.hpp b/src/asset-manager.hpp index f8ff6a8..d52145f 100644 --- a/src/asset-manager.hpp +++ b/src/asset-manager.hpp @@ -3,6 +3,8 @@ #include "pk.h" +#include "asset-types.h" + #include #include @@ -14,9 +16,6 @@ TypeSafeInt_constexpr(AssetLoadingState, uint8_t, 0xFF); TypeSafeInt_constexpr(AssetType, uint8_t, 0xFF); TypeSafeInt_constexpr(AssetFlags, uint8_t, 0xFF); -const int64_t AssetKeyLength = 16; -using AssetKey = char[AssetKeyLength]; - const AssetLoadingState PKE_ASSET_LOADING_STATE_UNLOADED = AssetLoadingState {0}; const AssetLoadingState PKE_ASSET_LOADING_STATE_LOADING = AssetLoadingState {1}; const AssetLoadingState PKE_ASSET_LOADING_STATE_LOADED = AssetLoadingState {2}; @@ -33,9 +32,6 @@ const AssetType PKE_ASSET_TYPE_ALL = AssetType {0xFF}; const AssetFlags PKE_ASSET_FLAGS_NONE = AssetFlags {0x00}; const AssetFlags PKE_ASSET_FLAGS_MEM_STATIC = AssetFlags {0x01}; -constexpr int64_t EngineDefinedAssetCount = 9; -extern AssetKey EngineDefinedAssets[EngineDefinedAssetCount]; - union pke_asset_details { struct pke_asset_details_shader { } shader; diff --git a/src/asset-types.h b/src/asset-types.h new file mode 100644 index 0000000..8fbb793 --- /dev/null +++ b/src/asset-types.h @@ -0,0 +1,7 @@ +#ifndef PKE_ASSET_TYPES_H +#define PKE_ASSET_TYPES_H + +#define AssetKeyLength 16l +typedef char AssetKey[AssetKeyLength]; + +#endif /* PKE_ASSET_TYPES_H */ diff --git a/src/project.cpp b/src/project.cpp index c981f03..00c4c1f 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -3,6 +3,7 @@ #include "asset-manager.hpp" #include "components.hpp" +#include "embedded-shaders.h" #include "pk.h" #include "plugins.hpp" #include "entities.hpp" @@ -417,8 +418,8 @@ void PkeProject_Save(const char *filePath) { // TODO 2025-05-30 JCB // This should be a flag bool isGlobalAsset = false; - for (long k = 0; k < EngineDefinedAssetCount; ++k) { - if (strncmp(EngineDefinedAssets[k], arr_obj_data->key, AssetKeyLength) == 0) { + for (long k = 0; k < embedded_shader_index_count; ++k) { + if (strncmp(embedded_shaders[k].name, arr_obj_data->key, AssetKeyLength) == 0) { isGlobalAsset = true; break; } diff --git a/src/window.cpp b/src/window.cpp index 773c767..a0e33f6 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -9,6 +9,7 @@ #include "asset-manager.hpp" #include "camera.hpp" #include "ecs.hpp" +#include "embedded-shaders.h" #include "font.hpp" #include "game-settings.hpp" #include "math-helpers.hpp" @@ -1825,8 +1826,8 @@ void CreatePresentPipeline() { assert(pkvk_present.descriptor_sets == nullptr || pkvk_present.descriptor_sets == CAFE_BABE(VkDescriptorSet)); // enqueue asset loading - AssetHandle vertShaderAsset{AM_GetHandle(AssetKey{"pke_prsnt_vrt\0\0"})}; - AssetHandle fragShaderAsset{AM_GetHandle(AssetKey{"pke_prsnt_frg\0\0"})}; + AssetHandle vertShaderAsset{AM_GetHandle(embedded_shaders[embedded_shader_index_present_vert].name)}; + AssetHandle fragShaderAsset{AM_GetHandle(embedded_shaders[embedded_shader_index_present_frag].name)}; VkPipelineShaderStageCreateInfo shaderStages[2]; for (long i = 0; i < 2; ++i) { @@ -2262,13 +2263,13 @@ void CreateGraphicsPipelines() { // pipelines { // enqueue asset loading - AssetHandle vertShaderAssetHandle{AM_GetHandle(AssetKey{"pke_txtr_vrt\0\0\0"})}; - AssetHandle textureFragShaderAssetHandle { AM_GetHandle(AssetKey{"pke_txtr_frg\0\0\0"})}; - AssetHandle vertGlyphAssetHandle{AM_GetHandle(AssetKey{"pke_glyph_vrt\0\0"})}; - AssetHandle fragGlyphAssetHandle { AM_GetHandle(AssetKey{"pke_glyph_frg\0\0"})}; - AssetHandle asset_handle_vert_ui_base { AM_GetHandle(AssetKey{"pke_ui_bs_vrt\0\0"})}; - AssetHandle asset_handle_frag_ui_base { AM_GetHandle(AssetKey{"pke_ui_bs_frg\0\0"})}; - AssetHandle asset_handle_frag_ui_txtr { AM_GetHandle(AssetKey{"pke_ui_txt_frg\0"})}; + AssetHandle vertShaderAssetHandle { AM_GetHandle(embedded_shaders[embedded_shader_index_3d_vert].name)}; + AssetHandle textureFragShaderAssetHandle { AM_GetHandle(embedded_shaders[embedded_shader_index_3d_frag].name)}; + AssetHandle vertGlyphAssetHandle { AM_GetHandle(embedded_shaders[embedded_shader_index_glyph_vert].name)}; + AssetHandle fragGlyphAssetHandle { AM_GetHandle(embedded_shaders[embedded_shader_index_glyph_frag].name)}; + AssetHandle asset_handle_vert_ui_base { AM_GetHandle(embedded_shaders[embedded_shader_index_ui_base_vert].name)}; + AssetHandle asset_handle_frag_ui_base { AM_GetHandle(embedded_shaders[embedded_shader_index_ui_base_frag].name)}; + AssetHandle asset_handle_frag_ui_txtr { AM_GetHandle(embedded_shaders[embedded_shader_index_ui_texture_frag].name)}; const long vertexBindingCount = 4; long index = 0; @@ -4206,7 +4207,7 @@ VkShaderModule UploadShader(AssetHandle handle) { return NULL; } #ifndef NDEBUG - fprintf(stdout, "Uploading Shader: '%s'\n", asset->basePath); + fprintf(stdout, "Uploading Shader: '%s'\n", asset->key); #endif VkShaderModuleCreateInfo createInfo; -- cgit v1.2.3