2026-07-23 01:24:42 +02:00
|
|
|
|
// SPDX-License-Identifier: LGPL-3.0-only
|
|
|
|
|
|
// SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
|
2026-05-12 01:16:40 +02:00
|
|
|
|
|
|
|
|
|
|
export module Crafter.Build:Asset;
|
|
|
|
|
|
import std;
|
|
|
|
|
|
namespace fs = std::filesystem;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Crafter {
|
|
|
|
|
|
// Compress a build-time asset (.png/.obj) into its on-disk
|
|
|
|
|
|
// SaveCompressed counterpart (.ctex/.cmesh) using Crafter.Asset's
|
|
|
|
|
|
// library API in-process. Returns "" on success, an error message
|
|
|
|
|
|
// otherwise (matches Shader::Compile's contract).
|
|
|
|
|
|
//
|
|
|
|
|
|
// Real implementation lives in the impl unit and only compiles when
|
|
|
|
|
|
// CRAFTER_BUILD_HAS_ASSET is defined (i.e. when the build links
|
|
|
|
|
|
// Crafter.Asset). The bootstrap build.sh produces a stub variant
|
|
|
|
|
|
// that errors out at runtime if cfg.assets is non-empty — full
|
|
|
|
|
|
// support requires a self-host rebuild via crafter-build itself,
|
|
|
|
|
|
// which resolves the Crafter.Asset dep through project.cpp.
|
refactor: drop Windows host support
crafter-build is moving to a single Flatpak distribution, and there is
no Windows host in that picture: no build.cmd, no MSVC or mingw host
build, no DLL plus launcher. Delete every host-Windows path instead of
leaving it to rot unverified: the cmd.exe command runner and quoting,
the LOCALAPPDATA cache, the MSVC and mingw-host LoadProject variants
with their LIBCXX_DIR and CRAFTER_MINGW_DIR plumbing, the winsock port
probe, the LoadLibrary libclang loader, the console-width and isatty
shims, and the preprocessor guards around the Linux bodies.
The x86_64-w64-mingw32 cross-compile target stays. It is target logic
(output names, -femulated-tls, the libstdc++ link extras, copying a
dependency DLL next to a mingw exe, wine as the runner) and did not
depend on any of the removed code. The msvc target goes with the host
that was the only thing able to use it.
Three target-path warts fixed on the way: ExpectedOutput named a mingw
static library <name>.lib while the archive step wrote lib<name>.a, so
those libraries relinked on every run; the import lib is no longer
copied next to a mingw exe, since the dependency's own bin dir is
already on the link line; and llvm-ar now writes every archive, not
only the LTO ones, so Debug and Release archives are made the same way.
CRAFTER_API and Crafter.Build-Api.h existed only for the DLL boundary.
Nothing downstream used them, so they are removed rather than kept as
an empty macro nobody can verify.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 21:56:38 +02:00
|
|
|
|
export std::string CompressAsset(const fs::path& input, const fs::path& output);
|
2026-05-19 00:50:06 +02:00
|
|
|
|
|
|
|
|
|
|
// Split a single .obj + .mtl file by material group into per-material
|
|
|
|
|
|
// .cmesh files, per-unique-albedo .ctex files, and a scene.txt manifest
|
|
|
|
|
|
// under outDir. All albedo textures are resized to albedoSize × albedoSize
|
|
|
|
|
|
// before compression (required for a texture_2d_array where all layers
|
|
|
|
|
|
// must have identical dimensions).
|
|
|
|
|
|
//
|
|
|
|
|
|
// scene.txt format (read by the Sponza example at runtime):
|
|
|
|
|
|
// <albedoCount>
|
|
|
|
|
|
// <meshCount>
|
|
|
|
|
|
// <albedoIdx_for_mesh_0> (-1 = no albedo)
|
|
|
|
|
|
// ...
|
|
|
|
|
|
//
|
|
|
|
|
|
// Idempotent: returns "" immediately if outDir/scene.txt already exists,
|
|
|
|
|
|
// so repeated builds skip the expensive split+resize step.
|
|
|
|
|
|
// Returns "" on success, an error string on failure.
|
refactor: drop Windows host support
crafter-build is moving to a single Flatpak distribution, and there is
no Windows host in that picture: no build.cmd, no MSVC or mingw host
build, no DLL plus launcher. Delete every host-Windows path instead of
leaving it to rot unverified: the cmd.exe command runner and quoting,
the LOCALAPPDATA cache, the MSVC and mingw-host LoadProject variants
with their LIBCXX_DIR and CRAFTER_MINGW_DIR plumbing, the winsock port
probe, the LoadLibrary libclang loader, the console-width and isatty
shims, and the preprocessor guards around the Linux bodies.
The x86_64-w64-mingw32 cross-compile target stays. It is target logic
(output names, -femulated-tls, the libstdc++ link extras, copying a
dependency DLL next to a mingw exe, wine as the runner) and did not
depend on any of the removed code. The msvc target goes with the host
that was the only thing able to use it.
Three target-path warts fixed on the way: ExpectedOutput named a mingw
static library <name>.lib while the archive step wrote lib<name>.a, so
those libraries relinked on every run; the import lib is no longer
copied next to a mingw exe, since the dependency's own bin dir is
already on the link line; and llvm-ar now writes every archive, not
only the LTO ones, so Debug and Release archives are made the same way.
CRAFTER_API and Crafter.Build-Api.h existed only for the DLL boundary.
Nothing downstream used them, so they are removed rather than kept as
an empty macro nobody can verify.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 21:56:38 +02:00
|
|
|
|
export std::string BuildOBJBundle(
|
2026-05-19 00:50:06 +02:00
|
|
|
|
const fs::path& objPath,
|
|
|
|
|
|
const fs::path& mtlPath,
|
|
|
|
|
|
const fs::path& outDir,
|
|
|
|
|
|
std::uint16_t albedoSize = 1024
|
|
|
|
|
|
);
|
2026-05-12 01:16:40 +02:00
|
|
|
|
}
|