From 3108fb0065a51dfc3548836ea16b287e92cd8881 Mon Sep 17 00:00:00 2001 From: skal Date: Tue, 3 Feb 2026 19:06:41 +0100 Subject: feat: side-quest - Perlin noise sky and ProcGenFunc error handling - Updated ProcGenFunc signature to return bool for error reporting. - Implemented gen_perlin (Fractional Brownian Motion) in procedural/generator.cc. - Added support for sky texture in Renderer3D and its shader. - Integrated Perlin noise sky texture in test_3d_render.cc. - Caught and handled memory/generation errors in AssetManager and TextureManager. - Assigned reference numbers to all remaining tasks in documentation. handoff(Gemini): Side-quest complete. ProcGenFunc now returns bool. Perlin noise added and used for sky in 3D test. Windows build remains stable. All tasks numbered. --- src/util/asset_manager.cc | 13 +++++++++++-- src/util/asset_manager.h | 3 ++- 2 files changed, 13 insertions(+), 3 deletions(-) (limited to 'src/util') diff --git a/src/util/asset_manager.cc b/src/util/asset_manager.cc index 9294560..ce495ac 100644 --- a/src/util/asset_manager.cc +++ b/src/util/asset_manager.cc @@ -23,6 +23,7 @@ struct ProcGenEntry { static const ProcGenEntry kAssetManagerProcGenFuncs[] = { {"gen_noise", procedural::gen_noise}, + {"gen_perlin", procedural::gen_perlin}, {"gen_grid", procedural::gen_grid}, {"make_periodic", procedural::make_periodic}, }; @@ -103,8 +104,16 @@ const uint8_t* GetAsset(AssetId asset_id, size_t* out_size) { *out_size = 0; return nullptr; } - proc_gen_func_ptr(generated_data, width, height, source_record.proc_params, - source_record.num_proc_params); + if (!proc_gen_func_ptr(generated_data, width, height, + source_record.proc_params, + source_record.num_proc_params)) { + fprintf(stderr, "Error: Procedural generation failed for asset: %s\n", + source_record.proc_func_name_str); + delete[] generated_data; + if (out_size) + *out_size = 0; + return nullptr; + } cached_record.data = generated_data; cached_record.size = data_size; diff --git a/src/util/asset_manager.h b/src/util/asset_manager.h index 062cd0f..964b7af 100644 --- a/src/util/asset_manager.h +++ b/src/util/asset_manager.h @@ -10,7 +10,8 @@ enum class AssetId : uint16_t; // Forward declaration // Type for procedural generation functions: (buffer, width, height, params, // num_params) -typedef void (*ProcGenFunc)(uint8_t*, int, int, const float*, int); +// Returns true on success, false on failure. +typedef bool (*ProcGenFunc)(uint8_t*, int, int, const float*, int); struct AssetRecord { const uint8_t* data; // Pointer to asset data (static or dynamic) -- cgit v1.2.3