diff --git a/prefs.js b/prefs.js
index 392e57c..9dc4ae4 100644
--- a/prefs.js
+++ b/prefs.js
@@ -48,6 +48,7 @@ var PreferencesDialog = class PreferencesDialog {
this._bindSwitch('destroy-dialogs');
this._bindAdjustment('flame-movement-speed');
this._bindAdjustment('flame-scale');
+ this._bindSwitch('flame-3d-noise');
this._bindColorButton('fire-color-1');
this._bindColorButton('fire-color-2');
this._bindColorButton('fire-color-3');
diff --git a/resources/ui/gtk3.ui b/resources/ui/gtk3.ui
index 2f89d09..0c01ee4 100644
--- a/resources/ui/gtk3.ui
+++ b/resources/ui/gtk3.ui
@@ -426,6 +426,70 @@
+
+
+
+
10
diff --git a/resources/ui/gtk4.ui b/resources/ui/gtk4.ui
index 4db7634..0cb151e 100644
--- a/resources/ui/gtk4.ui
+++ b/resources/ui/gtk4.ui
@@ -355,6 +355,59 @@
+
+
+ 0
+
+
+
+
+ vertical
+ 3
+
+
+ Use a 3D Noise
+ 0
+ start
+ center
+ 1
+
+
+
+
+ Makes the fire look more interesting at the cost of performance.
+ 0
+ start
+ center
+ 1
+
+
+
+
+
+
+
+ end
+ center
+
+
+
+
+ edit-clear-symbolic
+ Reset to Default Value
+
+
+
+
+
+
+
+
0
diff --git a/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml b/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml
index 08e45c5..d19bbf3 100644
--- a/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml
+++ b/schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml
@@ -41,6 +41,12 @@
The size of the flames.
+
+ false
+ Flame 3D Noise
+ Use a 3D noise for the flames.
+
+
"rgba(76, 51, 25, 0.0)"
Fire Color 1
diff --git a/src/extension/FireShader.js b/src/extension/FireShader.js
index d330d70..62de0eb 100644
--- a/src/extension/FireShader.js
+++ b/src/extension/FireShader.js
@@ -124,8 +124,12 @@ var FireShader = GObject.registerClass({Properties: {}, Signals: {}},
// Get a noise value which moves vertically in time.
vec2 uv = cogl_tex_coord_in[0].st * vec2(uSizeX, uSizeY) / FIRE_SCALE;
uv.y += uTime * FIRE_SPEED;
- float noise = noise2D(uv * 7.5, 5);
- // float noise = noise3D(vec3(uv*7.5, uTime*FIRE_SPEED*4.0), 5);
+
+ #if ${settings.get_boolean('flame-3d-noise') ? 1 : 0}
+ float noise = noise3D(vec3(uv*7.5, uTime*FIRE_SPEED*3.0), 5);
+ #else
+ float noise = noise2D(uv * 7.5, 5);
+ #endif
// Modulate noise by effect mask.
vec2 effectMask = effectMask(HIDE_TIME, FADE_WIDTH, EDGE_FADE);