diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-03 19:06:41 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-03 19:06:41 +0100 |
| commit | 3108fb0065a51dfc3548836ea16b287e92cd8881 (patch) | |
| tree | b20d3ffd904b65596ce9dd2df15a527b91a6539f /src/util | |
| parent | c3714939897af2541c655c03bcdd61108fff46ea (diff) | |
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.
Diffstat (limited to 'src/util')
| -rw-r--r-- | src/util/asset_manager.cc | 13 | ||||
| -rw-r--r-- | src/util/asset_manager.h | 3 |
2 files changed, 13 insertions, 3 deletions
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) |
