diff --git a/modules/assets/private/shader.cpp b/modules/assets/private/shader.cpp index 500c45d..0a568ef 100644 --- a/modules/assets/private/shader.cpp +++ b/modules/assets/private/shader.cpp @@ -2,13 +2,18 @@ namespace lt::assets { +constexpr auto total_metadata_size = // + sizeof(AssetMetadata::type) // + + sizeof(AssetMetadata::version) // + + sizeof(ShaderAsset::Metadata::type) // + + sizeof(BlobMetadata::tag) // + + sizeof(BlobMetadata::offset) // + + sizeof(BlobMetadata::compression_type) // + + sizeof(BlobMetadata::compressed_size) // + + sizeof(BlobMetadata::uncompressed_size); + ShaderAsset::ShaderAsset(const std::filesystem::path &path): m_stream(path) { - constexpr auto total_metadata_size = // - sizeof(AssetMetadata) // - + sizeof(Metadata) // - + sizeof(BlobMetadata); - ensure(m_stream.is_open(), "Failed to open shader asset at: {}", path.string()); const auto read = [this](auto &field) { m_stream.read(std::bit_cast(&field), sizeof(field)); @@ -85,9 +90,10 @@ ShaderAsset::ShaderAsset(const std::filesystem::path &path): m_stream(path) destination, std::ios::binary | std::ios::trunc, }; + const auto code_blob_metadata = BlobMetadata { .tag = std::to_underlying(BlobTag::code), - .offset = static_cast(stream.tellp()) + sizeof(BlobMetadata), + .offset = total_metadata_size, .compression_type = CompressionType::none, .compressed_size = code_blob.size(), .uncompressed_size = code_blob.size(), diff --git a/modules/assets/private/shader.test.cpp b/modules/assets/private/shader.test.cpp index 357bec8..32ce6cb 100644 --- a/modules/assets/private/shader.test.cpp +++ b/modules/assets/private/shader.test.cpp @@ -40,10 +40,15 @@ Suite packing = "shader_pack"_suite = [] { dummy_blob.emplace_back(static_cast(idx)); } - const auto expected_size = // - sizeof(AssetMetadata) // - + sizeof(ShaderAsset::Metadata) // - + sizeof(BlobMetadata) // + const auto expected_size = // + sizeof(AssetMetadata::type) // + + sizeof(AssetMetadata::version) // + + sizeof(ShaderAsset::Metadata::type) // + + sizeof(BlobMetadata::tag) // + + sizeof(BlobMetadata::offset) // + + sizeof(BlobMetadata::compression_type) // + + sizeof(BlobMetadata::compressed_size) // + + sizeof(BlobMetadata::uncompressed_size) // + dummy_blob.size(); ShaderAsset::pack(