Skip to content

Commit cd9395f

Browse files
authored
Merge pull request #1 from DGriffin91/main
Updated shaders to use glam functions for making vecs
2 parents 6916236 + 60dd592 commit cd9395f

14 files changed

+129
-144
lines changed

shaders/src/a_lot_of_spheres.rs

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
//! ```
1313
1414
use shared::*;
15-
use spirv_std::glam::{const_mat2, Mat2, Vec2, Vec3, Vec3Swizzles, Vec4};
15+
use spirv_std::glam::{const_mat2, vec2, vec3, Mat2, Vec2, Vec3, Vec3Swizzles, Vec4};
1616

1717
// Note: This cfg is incorrect on its surface, it really should be "are we compiling with std", but
1818
// we tie #[no_std] above to the same condition, so it's fine.
@@ -46,16 +46,16 @@ fn hash(n: f32) -> f32 {
4646
(n.sin() * 43758.5453).gl_fract()
4747
}
4848
fn _hash2(n: f32) -> Vec2 {
49-
(Vec2::new(n, n + 1.0).sin() * Vec2::new(2.1459123, 3.3490423)).gl_fract()
49+
(vec2(n, n + 1.0).sin() * vec2(2.1459123, 3.3490423)).gl_fract()
5050
}
5151
fn hash2_vec(n: Vec2) -> Vec2 {
52-
(Vec2::new(n.x * n.y, n.x + n.y).sin() * Vec2::new(2.1459123, 3.3490423)).gl_fract()
52+
(vec2(n.x * n.y, n.x + n.y).sin() * vec2(2.1459123, 3.3490423)).gl_fract()
5353
}
5454
fn _hash3(n: f32) -> Vec3 {
55-
(Vec3::new(n, n + 1.0, n + 2.0).sin() * Vec3::new(3.5453123, 4.1459123, 1.3490423)).gl_fract()
55+
(vec3(n, n + 1.0, n + 2.0).sin() * vec3(3.5453123, 4.1459123, 1.3490423)).gl_fract()
5656
}
5757
fn hash3_vec(n: Vec2) -> Vec3 {
58-
(Vec3::new(n.x, n.y, n.x + 2.0).sin() * Vec3::new(3.5453123, 4.1459123, 1.3490423)).gl_fract()
58+
(vec3(n.x, n.y, n.x + 2.0).sin() * vec3(3.5453123, 4.1459123, 1.3490423)).gl_fract()
5959
}
6060

6161
//
@@ -98,7 +98,7 @@ fn intersect_unit_sphere(ro: Vec3, rd: Vec3, sph: Vec3, dist: &mut f32, normal:
9898
//
9999

100100
fn get_sphere_offset(grid: Vec2, center: &mut Vec2) {
101-
*center = (hash2_vec(grid + Vec2::new(43.12, 1.23)) - Vec2::splat(0.5)) * (GRIDSIZESMALL);
101+
*center = (hash2_vec(grid + vec2(43.12, 1.23)) - Vec2::splat(0.5)) * (GRIDSIZESMALL);
102102
}
103103

104104
impl Inputs {
@@ -110,15 +110,15 @@ impl Inputs {
110110
let y: f32 = s * MAXHEIGHT * (4.0 * t * (1. - t)).abs();
111111
let offset: Vec2 = grid + sphere_offset;
112112

113-
*center = Vec3::new(offset.x, y, offset.y) + 0.5 * Vec3::new(GRIDSIZE, 2.0, GRIDSIZE);
113+
*center = vec3(offset.x, y, offset.y) + 0.5 * vec3(GRIDSIZE, 2.0, GRIDSIZE);
114114
}
115115
}
116116
fn get_sphere_position(grid: Vec2, sphere_offset: Vec2, center: &mut Vec3) {
117117
let offset: Vec2 = grid + sphere_offset;
118-
*center = Vec3::new(offset.x, 0.0, offset.y) + 0.5 * Vec3::new(GRIDSIZE, 2.0, GRIDSIZE);
118+
*center = vec3(offset.x, 0.0, offset.y) + 0.5 * vec3(GRIDSIZE, 2.0, GRIDSIZE);
119119
}
120120
fn get_sphere_color(grid: Vec2) -> Vec3 {
121-
hash3_vec(grid + Vec2::new(43.12 * grid.y, 12.23 * grid.x)).normalize()
121+
hash3_vec(grid + vec2(43.12 * grid.y, 12.23 * grid.x)).normalize()
122122
}
123123

124124
impl Inputs {
@@ -141,7 +141,7 @@ impl Inputs {
141141
if intersect_plane(ro, rd, 0.0, &mut distcheck) && distcheck < MAXDISTANCE {
142142
*dist = distcheck;
143143
*material = 1;
144-
*normal = Vec3::new(0.0, 1.0, 0.0);
144+
*normal = vec3(0.0, 1.0, 0.0);
145145
col = Vec3::one();
146146
} else {
147147
col = Vec3::zero();
@@ -194,13 +194,12 @@ impl Inputs {
194194

195195
if *material == 1 || *material == 3 {
196196
// lightning
197-
let c: Vec3 = Vec3::new(-GRIDSIZE, 0.0, GRIDSIZE);
197+
let c: Vec3 = vec3(-GRIDSIZE, 0.0, GRIDSIZE);
198198
let mut x = 0;
199199
while x < 3 {
200200
let mut y = 0;
201201
while y < 3 {
202-
let mapoffset: Vec2 =
203-
map + Vec2::new([c.x, c.y, c.z][x], [c.x, c.y, c.z][y]);
202+
let mapoffset: Vec2 = map + vec2([c.x, c.y, c.z][x], [c.x, c.y, c.z][y]);
204203
let mut offset: Vec2 = Vec2::zero();
205204
get_sphere_offset(mapoffset, &mut offset);
206205
let lcolor: Vec3 = get_sphere_color(mapoffset);
@@ -220,7 +219,7 @@ impl Inputs {
220219
}
221220

222221
let smapoffset: Vec2 =
223-
map + Vec2::new([c.x, c.y, c.z][x], [c.x, c.y, c.z][y]);
222+
map + vec2([c.x, c.y, c.z][x], [c.x, c.y, c.z][y]);
224223
let mut soffset: Vec2 = Vec2::zero();
225224
get_sphere_offset(smapoffset, &mut soffset);
226225
let mut slpos: Vec3 = Vec3::zero();
@@ -252,7 +251,7 @@ impl Inputs {
252251
}
253252
} else {
254253
// emitter
255-
color = (1.5 + normal.dot(Vec3::new(0.5, 0.5, -0.5))) * get_sphere_color(map);
254+
color = (1.5 + normal.dot(vec3(0.5, 0.5, -0.5))) * get_sphere_color(map);
256255
}
257256
}
258257
color
@@ -264,14 +263,14 @@ impl Inputs {
264263
p.x *= self.resolution.x / self.resolution.y;
265264

266265
// camera
267-
let ce: Vec3 = Vec3::new(
266+
let ce: Vec3 = vec3(
268267
(0.232 * self.time).cos() * 10.0,
269268
6. + 3.0 * (0.3 * self.time).cos(),
270269
GRIDSIZE * (self.time / SPEED),
271270
);
272271
let ro: Vec3 = ce;
273272
let ta: Vec3 = ro
274-
+ Vec3::new(
273+
+ vec3(
275274
-(0.232 * self.time).sin() * 10.,
276275
-2.0 + (0.23 * self.time).cos(),
277276
10.0,
@@ -280,7 +279,7 @@ impl Inputs {
280279
let roll: f32 = -0.15 * (0.5 * self.time).sin();
281280
// camera tx
282281
let cw: Vec3 = (ta - ro).normalize();
283-
let cp: Vec3 = Vec3::new(roll.sin(), roll.cos(), 0.0);
282+
let cp: Vec3 = vec3(roll.sin(), roll.cos(), 0.0);
284283
let cu: Vec3 = (cw.cross(cp)).normalize();
285284
let cv: Vec3 = (cu.cross(cw)).normalize();
286285
let mut rd: Vec3 = (p.x * cu + p.y * cv + 1.5 * cw).normalize();
@@ -312,7 +311,7 @@ impl Inputs {
312311
);
313312
}
314313

315-
col = col.powf_vec(Vec3::new(EXPOSURE, EXPOSURE, EXPOSURE));
314+
col = col.powf_vec(vec3(EXPOSURE, EXPOSURE, EXPOSURE));
316315
col = col.clamp(Vec3::zero(), Vec3::one());
317316
// vigneting
318317
col *= 0.25 + 0.75 * (16.0 * q.x * q.y * (1.0 - q.x) * (1.0 - q.y)).powf(0.15);

shaders/src/a_question_of_time.rs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
//! ```
2828
2929
use shared::*;
30-
use spirv_std::glam::{Mat2, Vec2, Vec2Swizzles, Vec3, Vec3Swizzles, Vec4, Vec4Swizzles};
30+
use spirv_std::glam::{
31+
vec2, vec3, Mat2, Vec2, Vec2Swizzles, Vec3, Vec3Swizzles, Vec4, Vec4Swizzles,
32+
};
3133

3234
// Note: This cfg is incorrect on its surface, it really should be "are we compiling with std", but
3335
// we tie #[no_std] above to the same condition, so it's fine.
@@ -60,7 +62,7 @@ fn stroke(d: f32, w: f32, s: f32, i: f32) -> f32 {
6062
}
6163
// a simple palette
6264
fn pal(d: f32) -> Vec3 {
63-
0.5 * ((6.283 * d * Vec3::new(2.0, 2.0, 1.0) + Vec3::new(0.0, 1.4, 0.0)).cos() + Vec3::one())
65+
0.5 * ((6.283 * d * vec3(2.0, 2.0, 1.0) + vec3(0.0, 1.4, 0.0)).cos() + Vec3::one())
6466
}
6567
// 2d rotation matrix
6668
fn uvr_rotate(a: f32) -> Mat2 {
@@ -72,7 +74,7 @@ fn inversion(uv: Vec2, r: f32) -> Vec2 {
7274
}
7375
// seeded random number
7476
fn hash(s: Vec2) -> f32 {
75-
((s.dot(Vec2::new(12.9898, 78.2333))).sin() * 43758.5453123).gl_fract()
77+
((s.dot(vec2(12.9898, 78.2333))).sin() * 43758.5453123).gl_fract()
7678
}
7779

7880
// this is an algorithm to construct an apollonian packing with a descartes configuration
@@ -88,12 +90,12 @@ fn apollonian(uv: Vec2) -> Vec3 {
8890
let a: f32 = 6.283 / 3.;
8991
let ra: f32 = 1.0 + (a * 0.5).sin();
9092
let rb: f32 = 1.0 - (a * 0.5).sin();
91-
dec[0] = Vec3::new(0.0, 0.0, -1.0 / ra);
93+
dec[0] = vec3(0.0, 0.0, -1.0 / ra);
9294
let radius: f32 = 0.5 * (ra - rb);
9395
let bend: f32 = 1.0 / radius;
9496
let mut i = 1;
9597
while i < 4 {
96-
dec[i] = Vec3::new((i as f32 * a).cos(), (i as f32 * a).sin(), bend);
98+
dec[i] = vec3((i as f32 * a).cos(), (i as f32 * a).sin(), bend);
9799
// if the point is in one of the starting circles we have already found our solution
98100
if (uv - dec[i].xy()).length() < radius {
99101
return (uv - dec[i].xy()).extend(radius);
@@ -232,8 +234,8 @@ impl Inputs {
232234
pal(0.85),
233235
stroke(
234236
sdf_rect(
235-
uvrh + Vec2::new(uv_apo.z - (uv_apo.z * 0.8), 0.0),
236-
uv_apo.z * Vec2::new(0.4, 0.03),
237+
uvrh + vec2(uv_apo.z - (uv_apo.z * 0.8), 0.0),
238+
uv_apo.z * vec2(0.4, 0.03),
237239
),
238240
uv_apo.z * 0.01,
239241
0.005,
@@ -245,8 +247,8 @@ impl Inputs {
245247
pal(0.9),
246248
fill(
247249
sdf_rect(
248-
uvrm + Vec2::new(uv_apo.z - (uv_apo.z * 0.65), 0.0),
249-
uv_apo.z * Vec2::new(0.5, 0.002),
250+
uvrm + vec2(uv_apo.z - (uv_apo.z * 0.65), 0.0),
251+
uv_apo.z * vec2(0.5, 0.002),
250252
),
251253
0.005,
252254
1.0,
@@ -275,7 +277,7 @@ impl Inputs {
275277
0.05,
276278
1.0,
277279
);
278-
let size: Vec2 = uv_apo.z * Vec2::new(0.45, 0.08);
280+
let size: Vec2 = uv_apo.z * vec2(0.45, 0.08);
279281
c = mix(
280282
c,
281283
pal(0.55 - r * 0.6),
@@ -293,7 +295,7 @@ impl Inputs {
293295
);
294296
// drawing the screws
295297
} else {
296-
let size: Vec2 = uv_apo.z * Vec2::new(0.5, 0.1);
298+
let size: Vec2 = uv_apo.z * vec2(0.5, 0.1);
297299
c = mix(
298300
c,
299301
pal(0.85 - (uv_apo.z * 2.0)),

shaders/src/apollonian.rs

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
//! ```
1212
1313
use shared::*;
14-
use spirv_std::glam::{Vec2, Vec2Swizzles, Vec3, Vec3Swizzles, Vec4};
14+
use spirv_std::glam::{vec2, vec3, Vec2, Vec2Swizzles, Vec3, Vec3Swizzles, Vec4};
1515

1616
// Note: This cfg is incorrect on its surface, it really should be "are we compiling with std", but
1717
// we tie #[no_std] above to the same condition, so it's fine.
@@ -91,7 +91,7 @@ impl State {
9191
fn calc_normal(&mut self, pos: Vec3, t: f32, s: f32) -> Vec3 {
9292
let precis: f32 = 0.001 * t;
9393

94-
let e: Vec2 = Vec2::new(1.0, -1.0) * precis;
94+
let e: Vec2 = vec2(1.0, -1.0) * precis;
9595
(e.xyy() * self.map(pos + e.xyy(), s)
9696
+ e.yyx() * self.map(pos + e.yyx(), s)
9797
+ e.yxy() * self.map(pos + e.yxy(), s)
@@ -109,27 +109,23 @@ impl State {
109109
let nor: Vec3 = self.calc_normal(pos, t, anim);
110110

111111
// lighting
112-
let light1: Vec3 = Vec3::new(0.577, 0.577, -0.577);
113-
let light2: Vec3 = Vec3::new(-0.707, 0.000, 0.707);
112+
let light1: Vec3 = vec3(0.577, 0.577, -0.577);
113+
let light2: Vec3 = vec3(-0.707, 0.000, 0.707);
114114
let key: f32 = light1.dot(nor).clamp(0.0, 1.0);
115115
let bac: f32 = (0.2 + 0.8 * light2.dot(nor)).clamp(0.0, 1.0);
116116
let amb: f32 = 0.7 + 0.3 * nor.y;
117117
let ao: f32 = (tra.w * 2.0).clamp(0.0, 1.0).powf(1.2);
118118

119-
let mut brdf: Vec3 = 1.0 * Vec3::new(0.40, 0.40, 0.40) * amb * ao;
120-
brdf += 1.0 * Vec3::new(1.00, 1.00, 1.00) * key * ao;
121-
brdf += 1.0 * Vec3::new(0.40, 0.40, 0.40) * bac * ao;
119+
let mut brdf: Vec3 = 1.0 * vec3(0.40, 0.40, 0.40) * amb * ao;
120+
brdf += 1.0 * vec3(1.00, 1.00, 1.00) * key * ao;
121+
brdf += 1.0 * vec3(0.40, 0.40, 0.40) * bac * ao;
122122

123123
// material
124124
let mut rgb: Vec3 = Vec3::one();
125+
rgb = mix(rgb, vec3(1.0, 0.80, 0.2), (6.0 * tra.y).clamp(0.0, 1.0));
125126
rgb = mix(
126127
rgb,
127-
Vec3::new(1.0, 0.80, 0.2),
128-
(6.0 * tra.y).clamp(0.0, 1.0),
129-
);
130-
rgb = mix(
131-
rgb,
132-
Vec3::new(1.0, 0.55, 0.0),
128+
vec3(1.0, 0.55, 0.0),
133129
(1.0 - 2.0 * tra.z).clamp(0.0, 1.0).powf(8.0),
134130
);
135131

@@ -149,23 +145,23 @@ impl State {
149145
while jj < AA {
150146
let mut ii = 0;
151147
while ii < AA {
152-
let q: Vec2 = frag_coord + Vec2::new(ii as f32, jj as f32) / AA as f32;
148+
let q: Vec2 = frag_coord + vec2(ii as f32, jj as f32) / AA as f32;
153149
let p: Vec2 = (2.0 * q - self.inputs.resolution.xy()) / self.inputs.resolution.y;
154150

155151
// camera
156-
let ro: Vec3 = Vec3::new(
152+
let ro: Vec3 = vec3(
157153
2.8 * (0.1 + 0.33 * time).cos(),
158154
0.4 + 0.30 * (0.37 * time).cos(),
159155
2.8 * (0.5 + 0.35 * time).cos(),
160156
);
161-
let ta: Vec3 = Vec3::new(
157+
let ta: Vec3 = vec3(
162158
1.9 * (1.2 + 0.41 * time).cos(),
163159
0.4 + 0.10 * (0.27 * time).cos(),
164160
1.9 * (2.0 + 0.38 * time).cos(),
165161
);
166162
let roll: f32 = 0.2 * (0.1 * time).cos();
167163
let cw: Vec3 = (ta - ro).normalize();
168-
let cp: Vec3 = Vec3::new(roll.sin(), roll.cos(), 0.0);
164+
let cp: Vec3 = vec3(roll.sin(), roll.cos(), 0.0);
169165
let cu: Vec3 = cw.cross(cp).normalize();
170166
let cv: Vec3 = cu.cross(cw).normalize();
171167
let rd: Vec3 = (p.x * cu + p.y * cv + 2.0 * cw).normalize();
@@ -191,11 +187,7 @@ impl State {
191187
let _time: f32 = self.inputs.time * 0.25 + 0.01 * self.inputs.mouse.x;
192188
let anim: f32 = 1.1 + 0.5 * smoothstep(-0.3, 0.3, (0.1 * self.inputs.time).cos());
193189

194-
let col: Vec3 = self.render(
195-
frag_ray_ori + Vec3::new(0.82, 1.2, -0.3),
196-
freag_ray_dir,
197-
anim,
198-
);
190+
let col: Vec3 = self.render(frag_ray_ori + vec3(0.82, 1.2, -0.3), freag_ray_dir, anim);
199191
*frag_color = col.extend(1.0);
200192
}
201193
}

shaders/src/clouds.rs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Ported to Rust from <https://www.shadertoy.com/view/4tdSWr>
22
33
use shared::*;
4-
use spirv_std::glam::{const_mat2, const_vec3, Mat2, Vec2, Vec3, Vec3Swizzles, Vec4};
4+
use spirv_std::glam::{const_mat2, const_vec3, vec2, vec3, Mat2, Vec2, Vec3, Vec3Swizzles, Vec4};
55

66
// Note: This cfg is incorrect on its surface, it really should be "are we compiling with std", but
77
// we tie #[no_std] above to the same condition, so it's fine.
@@ -26,10 +26,7 @@ const SKY_COLOUR2: Vec3 = const_vec3!([0.4, 0.7, 1.0]);
2626
const M: Mat2 = const_mat2!([1.6, 1.2, -1.2, 1.6]);
2727

2828
fn hash(mut p: Vec2) -> Vec2 {
29-
p = Vec2::new(
30-
p.dot(Vec2::new(127.1, 311.7)),
31-
p.dot(Vec2::new(269.5, 183.3)),
32-
);
29+
p = vec2(p.dot(vec2(127.1, 311.7)), p.dot(vec2(269.5, 183.3)));
3330
Vec2::splat(-1.0) + 2.0 * (p.sin() * 43758.5453123).gl_fract()
3431
}
3532

@@ -39,15 +36,15 @@ fn noise(p: Vec2) -> f32 {
3936
let i: Vec2 = (p + Vec2::splat((p.x + p.y) * K1)).floor();
4037
let a: Vec2 = p - i + Vec2::splat((i.x + i.y) * K2);
4138
let o: Vec2 = if a.x > a.y {
42-
Vec2::new(1.0, 0.0)
39+
vec2(1.0, 0.0)
4340
} else {
44-
Vec2::new(0.0, 1.0)
41+
vec2(0.0, 1.0)
4542
}; //vec2 of = 0.5 + 0.5*vec2(sign(a.x-a.y), sign(a.y-a.x));
4643
let b: Vec2 = a - o + Vec2::splat(K2);
4744
let c: Vec2 = a - Vec2::splat(1.0 - 2.0 * K2);
48-
let h: Vec3 = (Vec3::splat(0.5) - Vec3::new(a.dot(a), b.dot(b), c.dot(c))).max(Vec3::zero());
45+
let h: Vec3 = (Vec3::splat(0.5) - vec3(a.dot(a), b.dot(b), c.dot(c))).max(Vec3::zero());
4946
let n: Vec3 = (h * h * h * h)
50-
* Vec3::new(
47+
* vec3(
5148
a.dot(hash(i + Vec2::zero())),
5249
b.dot(hash(i + o)),
5350
c.dot(hash(i + Vec2::splat(1.0))),
@@ -74,7 +71,7 @@ fn fbm(mut n: Vec2) -> f32 {
7471
impl Inputs {
7572
pub fn main_image(&self, frag_color: &mut Vec4, frag_coord: Vec2) {
7673
let p: Vec2 = frag_coord / self.resolution.xy();
77-
let mut uv: Vec2 = p * Vec2::new(self.resolution.x / self.resolution.y, 1.0);
74+
let mut uv: Vec2 = p * vec2(self.resolution.x / self.resolution.y, 1.0);
7875
let mut time: f32 = self.time * SPEED;
7976
let q: f32 = fbm(uv * CLOUD_SCALE * 0.5);
8077

@@ -94,7 +91,7 @@ impl Inputs {
9491

9592
//noise shape
9693
let mut f: f32 = 0.0;
97-
uv = p * Vec2::new(self.resolution.x / self.resolution.y, 1.0);
94+
uv = p * vec2(self.resolution.x / self.resolution.y, 1.0);
9895
uv *= CLOUD_SCALE;
9996
uv -= Vec2::splat(q - time);
10097
weight = 0.7;
@@ -112,7 +109,7 @@ impl Inputs {
112109
//noise colour
113110
let mut c: f32 = 0.0;
114111
time = self.time * SPEED * 2.0;
115-
uv = p * Vec2::new(self.resolution.x / self.resolution.y, 1.0);
112+
uv = p * vec2(self.resolution.x / self.resolution.y, 1.0);
116113
uv *= CLOUD_SCALE * 2.0;
117114
uv -= Vec2::splat(q - time);
118115
weight = 0.4;
@@ -128,7 +125,7 @@ impl Inputs {
128125
//noise ridge colour
129126
let mut c1: f32 = 0.0;
130127
time = self.time * SPEED * 3.0;
131-
uv = p * Vec2::new(self.resolution.x / self.resolution.y, 1.0);
128+
uv = p * vec2(self.resolution.x / self.resolution.y, 1.0);
132129
uv *= CLOUD_SCALE * 3.0;
133130
uv -= Vec2::splat(q - time);
134131
weight = 0.4;
@@ -145,7 +142,7 @@ impl Inputs {
145142

146143
let skycolour: Vec3 = mix(SKY_COLOUR2, SKY_COLOUR1, p.y);
147144
let cloudcolour: Vec3 =
148-
Vec3::new(1.1, 1.1, 0.9) * (CLOUD_DARK + CLOUD_LIGHT * c).clamp(0.0, 1.0);
145+
vec3(1.1, 1.1, 0.9) * (CLOUD_DARK + CLOUD_LIGHT * c).clamp(0.0, 1.0);
149146

150147
f = CLOUD_COVER + CLOUD_ALPHA * f * r;
151148

0 commit comments

Comments
 (0)