summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2022-12-21 15:45:58 -0500
committerpommicket <pommicket@gmail.com>2022-12-21 15:45:58 -0500
commit7bde2ed24256f6216b6c910b3e1f70532be0d941 (patch)
tree9c523341b1945c59b05c9a0358a4a4e4c517f1d5
parent49cfde2fb9fca47c3eab73f029fe0a2b9c913544 (diff)
some more functions
-rw-r--r--src/fshader_main.glsl3
-rw-r--r--src/main.rs9
-rw-r--r--src/sdf.rs19
3 files changed, 29 insertions, 2 deletions
diff --git a/src/fshader_main.glsl b/src/fshader_main.glsl
index 116fcd7..0f13a01 100644
--- a/src/fshader_main.glsl
+++ b/src/fshader_main.glsl
@@ -12,6 +12,7 @@ uniform int u_hsv;
uniform ivec2 u_antialiasing;
uniform int u_iterations;
uniform float u_aspect_ratio;
+uniform vec2 u_screen_size;
uniform vec4 u_flash;
uniform int u_flash_icon;
@@ -78,7 +79,7 @@ bool play_icon(vec2 pos) {
void main() {
float min_dist = 10.;
- vec2 inv_screen_size = 1.0 / vec2(1280.0, 720.0); // @TODO
+ vec2 inv_screen_size = 1.0 / u_screen_size;
vec2 aa_delta = inv_screen_size / vec2(AA_X, AA_Y);
vec3 final_color = vec3(0);
for (int m = 0; m < AA_X; m++) {
diff --git a/src/main.rs b/src/main.rs
index 1b0c382..66cef23 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,10 +1,13 @@
/*
@TODO:
- configurable resolution
+ (e.g. run on 1080p monitor at 720p to make it go faster)
- let user go back&forth through past sdfs using scenes.txt file
- documentation
- GenRandom integers (just use 0..u32::MAX and add a modulus)
- record a video
+- blender-style rendering the picture in multiple frames
+ (this lets us look at super complicated SDFs while still processing input, etc. at 60 fps)
- better SDL api: Context + Window<'a> impl !Send+!Sync
- gallery view
-----
@@ -31,6 +34,7 @@ a263736466a1634d697883a167436f6d706f736583a1695472616e736c61746583a16454696d6582
a263736466a1634d697883a169536d6f6f74684d696e82a167436f6d706f736583a166526f7461746583a16454696d6582fa3ce93344fa3f037de0a16454696d6582fabcf59274fa3f605e9ca16454696d6582fabd5d556dfa3f13891ca167436f6d706f736583a167436f6d706f736582a167436f6d706f736582a16641726374616ea163463332fa3da39b50a167436f6d706f736582684964656e74697479684964656e74697479a167436f6d706f736582a16353696ea163463332fa3e785a08a167436f6d706f736582684964656e74697479684964656e74697479a167436f6d706f736583a166526f7461746583a163463332fa3ec36808a163463332fa3e1fdf58a163463332fa3e69ed18a165546f727573a266726164697573a163463332fa3fb2f5de69746869636b6e657373a163463332fa3e22de5d684964656e74697479684964656e74697479684964656e74697479a167436f6d706f736583a16353696ea163463332fa3ea5ea70a168426f784672616d65a26473697a65a16454696d6582fabe10ed3efa3eb1cfd869746869636b6e657373a163463332fa3e0dea57684964656e74697479a168426f784672616d65a26473697a65a16454696d6582fabd741592fa401a9ae469746869636b6e657373a16454696d6582fa3c677072fa3e3bc95da16454696d6582fa3b24dd40fa3e816f846e636f6c6f725f66756e6374696f6ea165537153696ea16454696d6582fabc7f2b18fa3f6e73c2
a263736466a167436f6d706f736583a1695472616e736c61746583a163463332fa3f4811e4a163463332fa3f78c51ea16454696d6582fa3d90de6dfa3f596b98a1634d697883a167436f6d706f736583a167436f6d706f736582684964656e74697479684964656e74697479a167436f6d706f736583684964656e74697479a166537068657265a163463332fa3eef3a44684964656e74697479684964656e74697479a167436f6d706f736583a16f496e66696e6974654d6972726f7273a163463332fa3f6ad464a165546f727573a266726164697573a163463332fa3fcd633269746869636b6e657373a163463332fa3d887747684964656e74697479a16454696d6582fabcad7e74fa3f444f5c684964656e746974796e636f6c6f725f66756e6374696f6ea167436f6d706f736582a167436f6d706f736582a167436f6d706f736582a166526f7461746583a163463332fa3f139110a163463332fa3e8c6384a163463332fa3edc7998675369676d6f6964a16353696ea16454696d6582fa3ce10f8cfa3e42f2c8a167436f6d706f736582a16f496e66696e6974654d6972726f7273a163463332fa3f4e41c8a167436f6d706f736582a16641726374616ea16454696d6582fa3dc7acedfa3f76784ca16353696ea163463332fa3f62c45a
a263736466a169536d6f6f74684d696e82a167436f6d706f736583a167436f6d706f736582a16353696ea163463332fa3f0cf78ea166526f7461746583a163463332fa3f1a98baa163463332fa3f51c216a163463332fa3f70188aa16443756265a16454696d6582fa3d12c20efa3f7aa514684964656e74697479a167436f6d706f736583a166526f7461746583a163463332fa3e7c36f8a163463332fa3e13dac8a163463332fa3f5f7a24a167436f6d706f736583a16353696ea163463332fa3f2b95bca1634d697883a166537068657265a163463332fa3f50ea86a166537068657265a163463332fa3f6af350a163463332fa3f4a1b6a684964656e74697479684964656e746974796e636f6c6f725f66756e6374696f6ea167436f6d706f736582a167436f6d706f736582a166526f7461746583a16454696d6582fa3cafe358fa3f27e6e6a163463332fa3d5c6fc0a163463332fa3eef1c50a16353696ea163463332fa3f7f60f8a167436f6d706f736582a166526f7461746583a163463332fa3f594124a163463332fa3f176438a16454696d6582fa3a355d00fa3e35c550a166526f7461746583a16454696d6582fa3d94d98dfa3f64c122a163463332fa3cdbef00a163463332fa3f39d206
+a263736466a167436f6d706f73658366576962626c79a169536d6f6f74684d696e82a1634d696e82a168426f784672616d65a26473697a65a16454696d6582fa3e74cf22fa3eb9a90c69746869636b6e657373a16454696d6582faba35ebcdfa3e0973aba168547269507269736d82a16454696d6582fa3d516ee6fa3e90aa6ca16454696d6582fabdafc090fa3ef2dd0ca167436f6d706f736583a166526f7461746583a16454696d6582fa3d909ef3fa3f4b6a9ea16454696d6582fabb9a1e00fa3e820ce8a16454696d6582fa3d892cc1fa3ed8de9ca168426f784672616d65a26473697a65a16454696d6582fabe89e2f0fa3fdbba3669746869636b6e657373a16454696d6582fabc87af29fa3e032878684964656e74697479684964656e746974796e636f6c6f725f66756e6374696f6ea167436f6d706f73658266576962626c79a167436f6d706f736582a167436f6d706f736582a16353696ea16454696d6582fabb6722c0fa3e87035ca16f496e66696e6974654d6972726f7273a16454696d6582fabb55b4c0fa3ef9958ca167436f6d706f736582a1695472616e736c61746583a16454696d6582fabc43ded0fa3e519a88a16454696d6582fabcda280cfa3e66f8b0a16454696d6582fa3d55dc4efa3ec85c2466576962626c79
*/
// LICENSE: i'm not gonna sue you for "copyright infringement". go wild.
@@ -148,7 +152,6 @@ impl Programs {
let source_main = include_str!("fshader_main.glsl");
let source_test = include_str!("fshader_test.glsl");
let source_common = include_str!("fshader_common.glsl");
- println!("{:?}",scene.sdf);
let mut sdf = String::new();
let mut get_color = String::new();
@@ -570,6 +573,10 @@ impl State {
window.clear_screen(win::ColorF32::BLACK);
window.use_program(&self.programs.main);
window.uniform1f("u_aspect_ratio", window.aspect_ratio());
+ {
+ let (w,h) = window.size();
+ window.uniform2f("u_screen_size", w as f32, h as f32);
+ }
window.uniform1f("u_time", view.time as f32);
window.uniform1f(
"u_fov",
diff --git a/src/sdf.rs b/src/sdf.rs
index edf777c..87643cb 100644
--- a/src/sdf.rs
+++ b/src/sdf.rs
@@ -195,6 +195,10 @@ pub enum R3ToR3 {
#[prob(2)]
#[bias(0.01)]
Sigmoid, //based on sigmoid(x) = 1 / (1 + e^-x)
+ #[prob(2)]
+ Wibbly,
+ #[prob(2)]
+ Sqrt(Constant),
#[prob(0)]
Twisty(Constant),
}
@@ -553,6 +557,21 @@ impl Function for R3ToR3 {
);
output
}
+ Wibbly => {
+ let output = var.next();
+ write_str!(code,
+ "vec3 {output} = sqrt({input}*({input}+3*sin({input}))) * 0.39;\n"
+ );
+ output
+ }
+ Sqrt(c) => {
+ let output = var.next();
+ write_str!(code,
+ "vec3 {output} = sqrt({c} * abs({input}) + {c}*{c}) * 2.0;\n"
+ );
+ output
+
+ }
}
}
}