fix(assets/shader): opening the file in non-binary mode
This commit is contained in:
parent
bda9bb3dce
commit
0abd1c7e7f
2 changed files with 24 additions and 6 deletions
|
|
@ -89,7 +89,8 @@ constexpr auto total_metadata_size = //
|
|||
+ sizeof(BlobMetadata::compressed_size) //
|
||||
+ sizeof(BlobMetadata::uncompressed_size);
|
||||
|
||||
ShaderAsset::ShaderAsset(const std::filesystem::path &path): m_stream(path)
|
||||
ShaderAsset::ShaderAsset(const std::filesystem::path &path)
|
||||
: m_stream(path, std::ios::beg | std::ios::binary)
|
||||
{
|
||||
debug::ensure(m_stream.is_open(), "Failed to open shader asset at: {}", path.string());
|
||||
const auto read = [this](auto &field) {
|
||||
|
|
@ -210,10 +211,10 @@ void ShaderAsset::unpack_to(BlobTag tag, std::span<std::byte> destination) const
|
|||
m_code_blob_metadata.uncompressed_size
|
||||
);
|
||||
|
||||
m_stream.seekg(static_cast<long long>(m_code_blob_metadata.offset));
|
||||
m_stream.seekg(static_cast<long long>(m_code_blob_metadata.offset), std::ifstream::beg);
|
||||
m_stream.read(
|
||||
std::bit_cast<char *>(destination.data()),
|
||||
static_cast<long long>(m_code_blob_metadata.uncompressed_size)
|
||||
m_code_blob_metadata.uncompressed_size
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import assets.metadata;
|
||||
import assets.shader;
|
||||
import logger;
|
||||
import logger;
|
||||
import test.test;
|
||||
import test.expects;
|
||||
import std;
|
||||
|
|
@ -23,18 +24,34 @@ Suite raii = "shader_raii"_suite = [] {
|
|||
std::filesystem::create_directories(tmp_path);
|
||||
|
||||
Case { "happy path won't throw" } = [] {
|
||||
|
||||
auto shader_asset = ShaderAsset { "triangle.frag.asset" };
|
||||
};
|
||||
|
||||
Case { "many won't freeze/throw" } = [] {
|
||||
for (auto idx : std::views::iota(0u, 1'000u))
|
||||
{
|
||||
std::ignore = idx;
|
||||
auto shader_asset = ShaderAsset { "triangle.frag.asset" };
|
||||
}
|
||||
};
|
||||
|
||||
Case { "unhappy path throws" } = [] {
|
||||
expect_throw([] { ShaderAsset { "random_path" }; });
|
||||
// non-existent file
|
||||
expect_throw([] { ShaderAsset { "path" }; });
|
||||
|
||||
// incompatible type
|
||||
expect_throw([] { ShaderAsset { "dummytext" }; });
|
||||
|
||||
// random stressing
|
||||
expect_throw([] {
|
||||
for (auto idx : std::views::iota(0u, 1'000u))
|
||||
{
|
||||
auto shader_asset = ShaderAsset { std::to_string(idx) };
|
||||
}
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-interfaces-global-init)
|
||||
Suite packing = "shader_pack"_suite = [] {
|
||||
Case { "" } = [] {
|
||||
const auto out_path = tmp_path / "shader_packing";
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue