From 197e10c0cf3392de66f805963e03ade259f9b959 Mon Sep 17 00:00:00 2001 From: light7734 Date: Fri, 10 Oct 2025 13:58:32 +0330 Subject: [PATCH] wip --- modules/assets/public/metadata.hpp | 1 - modules/assets/public/shader.hpp | 28 ++++++++++++++++++---------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/modules/assets/public/metadata.hpp b/modules/assets/public/metadata.hpp index 025f155..4dd7e6a 100644 --- a/modules/assets/public/metadata.hpp +++ b/modules/assets/public/metadata.hpp @@ -26,7 +26,6 @@ struct AssetMetadata Type_T type; }; -#pragma pack() struct BlobMetadata { Tag_T tag; diff --git a/modules/assets/public/shader.hpp b/modules/assets/public/shader.hpp index ab68014..96e3b53 100644 --- a/modules/assets/public/shader.hpp +++ b/modules/assets/public/shader.hpp @@ -38,23 +38,31 @@ public: destination, std::ios::binary | std::ios::trunc, }; - ensure(stream.is_open(), "Failed to pack shader asset to {}", destination.string()); - - // NOLINTBEGIN(cppcoreguidelines-pro-type-cstyle-cast) - stream.write((char *)&asset_metadata, sizeof(asset_metadata)); - stream.write((char *)&metadata, sizeof(metadata)); - - auto code_blob_metadata = BlobMetadata { + const auto code_blob_metadata = BlobMetadata { .tag = std::to_underlying(BlobTag::code), .offset = static_cast(stream.tellp()) + sizeof(BlobMetadata), .compression_type = CompressionType::none, .compressed_size = code_blob.size(), .uncompressed_size = code_blob.size(), }; - stream.write((char *)&code_blob_metadata, sizeof(BlobMetadata)); - stream.write((char *)code_blob.data(), static_cast(code_blob.size())); - // NOLINTEND(cppcoreguidelines-pro-type-cstyle-cast) + ensure(stream.is_open(), "Failed to pack shader asset to {}", destination.string()); + const auto write = [&stream](auto &field) { + stream.write(std::bit_cast(&field), sizeof(field)); + }; + + write(asset_metadata.type); + write(asset_metadata.version); + write(metadata.type); + write(code_blob_metadata.tag); + write(code_blob_metadata.offset); + write(code_blob_metadata.compression_type); + write(code_blob_metadata.compressed_size); + write(code_blob_metadata.uncompressed_size); + stream.write( + std::bit_cast(code_blob.data()), + static_cast(code_blob.size()) + ); } ShaderAsset(const std::filesystem::path &path);