diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-04 09:45:17 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-04 09:45:36 +0100 |
| commit | 535b63d608948c5a9a85e96d1e8c7e475b00ede0 (patch) | |
| tree | 58e02774a773abe364fbe72682237203d22f45b6 /src/procedural/generator.cc | |
| parent | fdbeddc369d4b55d2098ebdb2e9ef160c0f50368 (diff) | |
handoff(Claude): Stabilize 3D renderer with rotating skybox and two-pass architecture
- Fixed black screen by ensuring clear operations in Pass 2 when Skybox pass is skipped.
- Resolved WebGPU validation errors by synchronizing depth-stencil state.
- Implemented rotating skybox using world-space ray unprojection (inv_view_proj).
- Improved procedural noise generation (multi-octave Value Noise).
- Restored scene integrity by correcting object indexing and removing artifacts.
- Updated documentation (TODO.md, PROJECT_CONTEXT.md).
Diffstat (limited to 'src/procedural/generator.cc')
| -rw-r--r-- | src/procedural/generator.cc | 36 |
1 files changed, 8 insertions, 28 deletions
diff --git a/src/procedural/generator.cc b/src/procedural/generator.cc index 0eb8b03..f6d4e02 100644 --- a/src/procedural/generator.cc +++ b/src/procedural/generator.cc @@ -33,7 +33,8 @@ bool gen_perlin(uint8_t* buffer, int w, int h, const float* params, // Pre-allocate temporary float buffer for accumulating noise float* accum = (float*)calloc((size_t)w * h, sizeof(float)); - if (!accum) return false; + if (!accum) + return false; float current_freq = base_freq; float current_amp = base_amp; @@ -42,7 +43,8 @@ bool gen_perlin(uint8_t* buffer, int w, int h, const float* params, for (int o = 0; o < octaves; ++o) { const int lattice_w = (int)ceil(current_freq) + 1; const int lattice_h = (int)ceil(current_freq) + 1; - float* lattice = (float*)malloc((size_t)lattice_w * lattice_h * sizeof(float)); + float* lattice = + (float*)malloc((size_t)lattice_w * lattice_h * sizeof(float)); if (!lattice) { free(accum); return false; @@ -110,43 +112,33 @@ bool gen_perlin(uint8_t* buffer, int w, int h, const float* params, bool gen_noise(uint8_t* buffer, int w, int h, const float* params, int num_params) { - float freq = (num_params > 1) ? params[1] : 4.0f; if (num_params > 0 && params[0] != 0) { - srand((unsigned int)params[0]); - } - - // Create a small lattice of random values const int lattice_w = (int)ceil(freq); const int lattice_h = (int)ceil(freq); - float* lattice = (float*)malloc((size_t)lattice_w * lattice_h * sizeof(float)); - - if (!lattice) return false; - + float* lattice = + (float*)malloc((size_t)lattice_w * lattice_h * sizeof(float)); + if (!lattice) + return false; for (int i = 0; i < lattice_w * lattice_h; ++i) { - lattice[i] = (float)rand() / RAND_MAX; - } const float scale_u = 1.f * (lattice_w - 1) / w; const float scale_v = 1.f * (lattice_h - 1) / h; - - for (int y = 0; y < h; ++y) { - const float v = scale_v * y; const int ly = (int)floor(v); @@ -162,7 +154,6 @@ bool gen_noise(uint8_t* buffer, int w, int h, const float* params, uint8_t* const dst = &buffer[y * w * 4]; for (int x = 0; x < w; ++x) { - float u = scale_u * x; const int lx = (int)floor(u); @@ -171,8 +162,6 @@ bool gen_noise(uint8_t* buffer, int w, int h, const float* params, float fu = smooth(u - lx); - - float n00 = n0[lx]; float n10 = n0[lx_next]; @@ -181,12 +170,8 @@ bool gen_noise(uint8_t* buffer, int w, int h, const float* params, float n11 = n1[lx_next]; - - const float noise = mix(mix(n00, n10, fu), mix(n01, n11, fu), fv); - - const uint8_t val = (uint8_t)(noise * 255.0f); dst[4 * x + 0] = val; // R @@ -196,19 +181,14 @@ bool gen_noise(uint8_t* buffer, int w, int h, const float* params, dst[4 * x + 2] = val; // B dst[4 * x + 3] = 255; // A - } - } free(lattice); return true; - } - - // Simple grid generator // Params[0]: Grid Size (pixels) // Params[1]: Line Thickness (pixels) |
