66 lines
2.5 KiB
C++
66 lines
2.5 KiB
C++
/*********************************************************************
|
|
* \file SasquatchBaker.cpp
|
|
*
|
|
* \author Romain BOULLARD
|
|
* \date August 2026
|
|
*********************************************************************/
|
|
#include <SasquatchBaker/SasquatchBaker.hpp>
|
|
|
|
#include <Engine/Sasquatch/Sasquatch.hpp>
|
|
|
|
#include <SasquatchBaker/SasquatchBakerAssertHandler.hpp>
|
|
|
|
namespace Bigfoot
|
|
{
|
|
void Bake(const BigFile& p_bigFile, const File& p_outputFile)
|
|
{
|
|
std::uint64_t assetCount = 0;
|
|
{
|
|
BigFile::Request countRequest {p_bigFile, "SELECT COUNT(*) FROM Asset;"};
|
|
[[maybe_unused]]
|
|
const bool hasCount = countRequest.Step();
|
|
ASSERT(SasquatchBakerAssertHandler, hasCount, "Failed to count the assets of the BigFile");
|
|
assetCount = countRequest.Get(0);
|
|
}
|
|
|
|
std::uint64_t totalFlatbufferBytes = 0;
|
|
{
|
|
BigFile::Request sizeRequest {p_bigFile, "SELECT COALESCE(SUM(LENGTH(Asset)), 0) FROM Asset;"};
|
|
[[maybe_unused]]
|
|
const bool hasSize = sizeRequest.Step();
|
|
ASSERT(SasquatchBakerAssertHandler, hasSize, "Failed to sum the asset sizes of the BigFile");
|
|
totalFlatbufferBytes = sizeRequest.Get(0);
|
|
}
|
|
|
|
std::uint64_t totalHardReferencesBytes = 0;
|
|
{
|
|
BigFile::Request sizeRequest {p_bigFile,
|
|
"SELECT COALESCE(SUM(LENGTH(HardReference)), 0) FROM AssetHardReference;"};
|
|
[[maybe_unused]]
|
|
const bool hasSize = sizeRequest.Step();
|
|
ASSERT(SasquatchBakerAssertHandler, hasSize, "Failed to sum the hardreferences sizes of the BigFile");
|
|
totalHardReferencesBytes = sizeRequest.Get(0);
|
|
}
|
|
|
|
SasquatchWriter writer {p_outputFile, assetCount, totalFlatbufferBytes, totalHardReferencesBytes};
|
|
|
|
BigFile::Request request {p_bigFile, "SELECT UUID FROM Asset;"};
|
|
while (request.Step())
|
|
{
|
|
const std::span<const std::byte> rawUUID = request.Get(0);
|
|
|
|
ASSERT(SasquatchBakerAssertHandler,
|
|
rawUUID.size() == UUID::UUID_BYTE_SIZE,
|
|
"Unexpected UUID blob size in BigFile (got {} / expected {})",
|
|
rawUUID.size(),
|
|
UUID::UUID_BYTE_SIZE);
|
|
|
|
const UUID uuid {std::span<const std::byte, UUID::UUID_BYTE_SIZE> {rawUUID.data(), UUID::UUID_BYTE_SIZE}};
|
|
const eastl::vector<std::byte> flatbuffer = p_bigFile.GetAssetFlatbuffer(uuid);
|
|
const eastl::vector<UUID> hardReferences = p_bigFile.GetAssetHardReferences(uuid);
|
|
|
|
writer.WriteAsset(uuid, flatbuffer, hardReferences);
|
|
}
|
|
}
|
|
} // namespace Bigfoot
|