// This file is part of the 64k demo project. // It defines the interface for procedural texture generation. // Used to generate texture data at runtime. #pragma once #include // Procedural generation function signature // buffer: Pointer to RGBA8 buffer (size w * h * 4) // w, h: Dimensions // params: Arbitrary float parameters for the generator // Returns true on success, false on failure. typedef bool (*ProcGenFunc)(uint8_t* buffer, int w, int h, const float* params, int num_params); namespace procedural { // Simple noise generator // Params[0]: Seed, Params[1]: Frequency bool gen_noise(uint8_t* buffer, int w, int h, const float* params, int num_params); // Perlin noise generator // Params[0]: Seed // Params[1]: Frequency (Scale) // Params[2]: Amplitude // Params[3]: Amplitude decay (e.g. 0.5) // Params[4]: Number of octaves (int) bool gen_perlin(uint8_t* buffer, int w, int h, const float* params, int num_params); // Example: Grid pattern bool gen_grid(uint8_t* buffer, int w, int h, const float* params, int num_params); // Post-process: Make texture periodic by blending edges // Params[0]: Border size ratio (0.0 - 0.5), default 0.1 bool make_periodic(uint8_t* buffer, int w, int h, const float* params, int num_params); // Plasma: classic sine-sum color texture // Params[0]: time/seed offset, Params[1]: frequency multiplier (default 2.0) bool gen_plasma(uint8_t* buffer, int w, int h, const float* params, int num_params); // Voronoi (Worley) cellular noise // Params[0]: cell scale (default 4.0) // Params[1]: mode: 0=F1, 1=F2, 2=F2-F1 borders (default 2) // Params[2]: seed bool gen_voronoi(uint8_t* buffer, int w, int h, const float* params, int num_params); // Post-process: convert grayscale height (R channel) to RGB normal map // Params[0]: strength (default 4.0) bool gen_normalmap(uint8_t* buffer, int w, int h, const float* params, int num_params); #if !defined(DEMO_STRIP_ALL) // Test-only: Failing generator bool gen_fail(uint8_t* buffer, int w, int h, const float* params, int num_params); #endif } // namespace procedural