From a4845f2102f47fc4b674502e4493b9f05791c2df Mon Sep 17 00:00:00 2001 From: trimill Date: Tue, 17 Sep 2024 17:45:56 -0400 Subject: [PATCH] changed a few things --- Cargo.lock | 4 +- Cargo.toml | 4 + cxgraph-web/Cargo.toml | 2 +- cxgraph-web/favicon.ico | Bin 0 -> 13094 bytes cxgraph-web/index.html | 121 +++++++++--------- cxgraph-web/src/lib.rs | 10 ++ cxgraph-web/{ => static}/editor.js | 10 +- cxgraph-web/static/icon/favicon16.png | Bin 0 -> 1098 bytes cxgraph-web/static/icon/favicon160.png | Bin 0 -> 17380 bytes cxgraph-web/static/icon/favicon32.png | Bin 0 -> 2127 bytes cxgraph-web/static/icon/favicon320.png | Bin 0 -> 46687 bytes cxgraph-web/static/icon/favicon48.png | Bin 0 -> 3409 bytes cxgraph-web/static/icon/favicon64.png | Bin 0 -> 4907 bytes cxgraph-web/static/icon/favicon640.png | Bin 0 -> 135713 bytes cxgraph-web/{ => static}/index.js | 87 +++++++------ cxgraph-web/static/style.css | 164 +++++++++++++++++++++++++ cxgraph-web/static/themes.js | 21 ++++ cxgraph-web/style.css | 110 ----------------- docs/language.md | 17 ++- docs/web.md | 8 +- libcxgraph/Cargo.toml | 4 +- libcxgraph/src/language/ast.rs | 10 +- libcxgraph/src/language/builtins.rs | 10 ++ libcxgraph/src/language/compiler.rs | 14 +++ libcxgraph/src/language/mod.rs | 6 +- libcxgraph/src/language/syntax.lalrpop | 3 + libcxgraph/src/language/token.rs | 4 +- libcxgraph/src/renderer/fragment.wgsl | 159 +++++++++++++++++++----- libcxgraph/src/renderer/mod.rs | 15 ++- libcxgraph/src/renderer/vertex.wgsl | 7 +- 30 files changed, 529 insertions(+), 261 deletions(-) create mode 100644 cxgraph-web/favicon.ico rename cxgraph-web/{ => static}/editor.js (92%) create mode 100644 cxgraph-web/static/icon/favicon16.png create mode 100644 cxgraph-web/static/icon/favicon160.png create mode 100644 cxgraph-web/static/icon/favicon32.png create mode 100644 cxgraph-web/static/icon/favicon320.png create mode 100644 cxgraph-web/static/icon/favicon48.png create mode 100644 cxgraph-web/static/icon/favicon64.png create mode 100644 cxgraph-web/static/icon/favicon640.png rename cxgraph-web/{ => static}/index.js (85%) create mode 100644 cxgraph-web/static/style.css create mode 100644 cxgraph-web/static/themes.js delete mode 100644 cxgraph-web/style.css diff --git a/Cargo.lock b/Cargo.lock index 91694c0..9102d56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -417,7 +417,7 @@ checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" [[package]] name = "cxgraph-web" -version = "0.1.0" +version = "0.2.0" dependencies = [ "console_error_panic_hook", "console_log", @@ -852,7 +852,7 @@ checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libcxgraph" -version = "0.1.0" +version = "0.2.0" dependencies = [ "lalrpop", "lalrpop-util", diff --git a/Cargo.toml b/Cargo.toml index 019a058..769c1a6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,3 +5,7 @@ members = [ "cxgraph-web", ] resolver = "2" + +[profile.release] +lto = true +opt-level = 's' diff --git a/cxgraph-web/Cargo.toml b/cxgraph-web/Cargo.toml index e6a4380..cfde0d1 100644 --- a/cxgraph-web/Cargo.toml +++ b/cxgraph-web/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cxgraph-web" -version = "0.1.0" +version = "0.2.0" edition = "2021" [lib] diff --git a/cxgraph-web/favicon.ico b/cxgraph-web/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fff7a23997855cf7e81f74a7da470ddad805b338 GIT binary patch literal 13094 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 F{0EE^*&hG^ literal 0 HcmV?d00001 diff --git a/cxgraph-web/index.html b/cxgraph-web/index.html index 3d3675c..830e00a 100644 --- a/cxgraph-web/index.html +++ b/cxgraph-web/index.html @@ -10,16 +10,21 @@ - CXGraph - + + + + + + + + + cxgraph + - +
- - - @@ -41,7 +46,12 @@
-
+
+ +
+ + +
@@ -51,107 +61,106 @@
-
-
+
+ -
+
-
-
+
+ -
+
-
+
+ Contours +
+ +
- +
-
- +
-
- +
-
- +
+
-
-
- -
-
- -
-
Coloring
+
+ Coloring

-
+
-
- Overlay -
- - -
-
- - -
-
+
+ Grid + +
+ +
+ + +
+
+ +
+ diff --git a/cxgraph-web/src/lib.rs b/cxgraph-web/src/lib.rs index 2237d81..03881d5 100644 --- a/cxgraph-web/src/lib.rs +++ b/cxgraph-web/src/lib.rs @@ -80,6 +80,11 @@ pub fn resize(width: u32, height: u32) { with_state(|state| state.resize((width, height))); } +#[wasm_bindgen] +pub fn set_res_scale(scale: f32) { + with_state(|state| state.uniforms.res_scale = scale); +} + #[wasm_bindgen] pub fn set_bounds(min_x: f32, min_y: f32, max_x: f32, max_y: f32) { with_state(|state| { @@ -109,6 +114,11 @@ pub fn set_decorations(value: u32) { with_state(|state| state.uniforms.decorations = value); } +#[wasm_bindgen] +pub fn set_grid_mode(value: u32) { + with_state(|state| state.uniforms.grid_mode = value); +} + #[wasm_bindgen] pub fn set_variable(idx: usize, re: f32, im: f32) { with_state(|state| { diff --git a/cxgraph-web/editor.js b/cxgraph-web/static/editor.js similarity index 92% rename from cxgraph-web/editor.js rename to cxgraph-web/static/editor.js index 4a81f8b..03484de 100644 --- a/cxgraph-web/editor.js +++ b/cxgraph-web/static/editor.js @@ -10,7 +10,6 @@ source_text.addEventListener("mousedown", () => { sourceFocused = true; }); source_text.addEventListener("focusout", () => { sourceFocused = false; }); source_text.addEventListener("keydown", (event) => { - console.log(event); if (event.key != "Tab") { sourceFocused = true; } @@ -159,3 +158,12 @@ source_text.addEventListener("input", (event) => { source_text.selectionEnd = e - amnt; }); +source_text.addEventListener("change", () => { + localStorage.setItem("editor_content", source_text.value); +}); + +if (localStorage.getItem("editor_content") !== null) { + source_text.value = localStorage.getItem("editor_content"); +} else { + source_text.value = "f(z) = 6z^2 - 2i - 1\nplot(z) = f(1 + sin(z)) / 8"; +} diff --git a/cxgraph-web/static/icon/favicon16.png b/cxgraph-web/static/icon/favicon16.png new file mode 100644 index 0000000000000000000000000000000000000000..178907505447b0faaf8eca36c849948ec68c3810 GIT binary patch literal 1098 zcmV-Q1hxB#P)EX>4Tx04R}tkvmAkKpe)urWPO62iT#ALx$>P7Zq`=RVYG*P%E_RU~=gTnlvOS zE{=k0!NJF3)xpJCR|i)?5PX0*J2)x2NQwVT3N2ziIPS-H_kG-b2MF~t)2yx-py{@m zO2oxXc2(?tMK6XhfB?cWvy3@ON}}WVx`&UicTt|z`P`qQU(Hzz@QK7RW|%hd2Jy_M zZE)Tv4zZ%F5}y-Km~=tnN3JU#zi}?OEbz>bnNH0Uhls^O8!K(hil#<9O&n1*o$`f@ z$13M7&RV(3n)l={4CeHeWvu?swklh8&O(yQY@rsKiae{k6fQ#Qs8h74&J!mjwOkC=dn;iM5L z6aoj1ZUWuV)^P`f0irc*o3$#AqT>q z@JpRIoTHm!VyGMh%S=6TG=S!vM8qNx*HnUg7 zawDvrG{bQBq-7*-BOwpC67lPPVb}CRq==)_@W;%n#nWyT{~m@9o-|*G>qN{Wt|VLy z__AFPIoPGL%E-dN(i|nP3~&G7tA7sMhe(<~BW+h=8SypY4v#dCx8;J-!5Xa}l;g@H zPrUyRZomG{H@}_vA$?77ukZ{w3n&gTMG-uYGjxLkq#ERoyFD}fdFA@EBmVL|eA%(r z2B(Ha1K+_JsNr=!A%~zv30W9sxV$yq{PoOt^D}Syx7gqBsP{YdX~mr~k}8A>zTwk6 z;)@cqGOo(`qw@SOeDUt!^O6|+z>&}7+Xqsa(P_cPjHMkHD}H(;VpfJtIXxWLoACMu z&x>O^!1>N0#@>{?1hgfnD-1gpcl`7Sr0f`1VVaevS-3omDMRcHT%^j#ZjHSgZdasx z?AY)r;7^NZ$jZ1V=S7$nIOR?%f;R>AG>z0gP-yrDihwC}j~_SpDSs1A8;mcf#U`jJ zh@-2gN}yQ6)6izfi^LC`GG<}OLduYe5f5+;^wXv^bu{rD7N{f~hIRwsfBFPbe55oO QW&i*H07*qoM6N<$f~YkDCjbBd literal 0 HcmV?d00001 diff --git a/cxgraph-web/static/icon/favicon160.png b/cxgraph-web/static/icon/favicon160.png new file mode 100644 index 0000000000000000000000000000000000000000..06598120094ede4b3451c3e2f28111851d2f60b0 GIT binary patch literal 17380 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
  • r6qlx^|G6Ll9&K zNmM#MiKOiL;DYzP0;Vk#?iDd@IIk4Yxn&{&&MBe4Hn|`icu=a>`(YhEnc!VjsozvU z`E(Eg`M#A<`s2@??;Rh(*H!SFU-%FCC;k_{@edHc2%OhlxGpRx^|)vJYH8zK1#&j< z27of}%l#W?ht9*-(phPb$F(W%2~sbzg74q)A#dU2TL5<`kXO0ud{+$s%J)=4QP0UoP`(A_bAxwWg0EWe#RLD4U-+l|6aOLK_y;R~;T}S` zJG%u%uiw4ec>g7kQy@nJ@3^012XNfqFzGsUyopWW6CibaSH^vE%Dwy$LP?a)1Vp}q z_6)!HH?cd*8-3o#g+d1KHb80^{k7hWet>5|6b;~2M(!sn^vb6IpVIDc;O-kxK0s;E z-S8Ehwcx8B_=OYyz;FDseB+<;!9RH6H;7*#&MK{^(Hd)djqcfU(Njh(ax_2=vCR($ zA)7&_@+PAVk<_J$}7t%mDlmd=L2`v)7m%D{fUU3&jDt z{8~JG>RKx2c*-R$7rWbS{ay@sg7PUS?f&?bp?v3c!}rA#zww3NE4~_p2k#yG%jKe|KOe4x z*Y`-eKhR8Kjn!5|{b;WpfGdUUYINV*Fg(o)4ZKsuxHl)_nhn7{)5`3#3Hbqx8GO6v z!o3=B3?~msdP<;}@Y|kKyU|bh=CHx7fP`EHMJZpoq)oxdxE)thzpLQ93eM|>?~4b1 zQ2{8Q8$P-4#flRZ2Z#f8Kqz(Yaz)X6=Hu5p{$M`H)R(|kGj`q;*Kz^w#4lr zS*{s^ZwLjY4IRi;Zs_{-%ctHU^C}a*s`5S_E&MhGln;K(7k-t`4IeIi-E%Jk!h+hy z{u_vW7cfAboY^-@!dy9ZuqoiZcHjoDttqV>VR?ea03qA881jtnk<*T0-eha=>@QVk2;nQvxe#r-4a^XuZoKkVJ-s;zGrSHbyO%dAE zO;W>T;XM$|23{Epna8H*EPW%b~CSLmFa=$N45xdhZ zS982q#d*mMVZ9;zVrlC4!7m*6B`3b*gD*MpRdN7JyG`Y*146$TALOlk9ljQp$7xKJ zclfOh%&v+uK}3n*jh$}?h!Z%ia`T!NFw<)G+cVQSXW9Zd8C0;VYiDu;U=E)=Dxmz0 zkQ)zf&QBJP@JXxr&5a)CVKBGyY51Vvn*bgyCp@lsJ8QvtT{xQo`KlMbc-^5GpF8Br zVbu>84yib(;j3dm>b{;Cbq>>x_0NZcuq$GjYRI-(C)?J=q*A-SC!IuP9IB`c$_&A@ z>S&&WJ$zEs88Bn-aP=|zLOWu>4lMqb(gd?rkbeXml=Q@Ar3l84bn2_?Yh@<2)QJ;5Tx zdewV4ReY-7+&riQIIe2~U%S8SeN;8SJD;03X%4rvTg8ELtDY1TIdI^*b3ZvyIN|eK zV~K*0wTI%WHdC)d0ri|CTUZuO_@t>HM;NxyX;st)#jD@U?`R6w)(z9RW)pgq@^Nf6 zslv4M-O*(JA#mk_pTe+%OSZ}zM$Z(rY0n>ZZY*@~ z?NXZp_VC+o?6(FZ3JzR2rL?@SH1#VeQU`nmS5QF%V+XO$&12ZkE}nb)H!xWScx)%; z3>7SD8?X*y$N}x+5PCIG2287p^RXCX0^MyHz%@3E>T#Z;CCY@z54sq#ak#Qlz5w7{ zz??%TCg)34u-->#=^U`MrIw|s;S9NA!tZg-Z8dJ?>v

    be!LAwh}wBf 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 bgYf?cTUh_2gyW;u00000NkvXXu0mjfUbR+X literal 0 HcmV?d00001 diff --git a/cxgraph-web/static/icon/favicon32.png b/cxgraph-web/static/icon/favicon32.png new file mode 100644 index 0000000000000000000000000000000000000000..b6c459d96a05c1ecfefcb64ca35adbeaee67d03a GIT binary patch literal 2127 zcmV-V2(b5wP)EX>4Tx04R}tkvmAkKpe)urWPO62iT#ALx$>P7Zq`=RVYG*P%E_RU~=gTnlvOS zE{=k0!NJF3)xpJCR|i)?5PX0*J2)x2NQwVT3N2ziIPS-H_kG-b2MF~t)2yx-py{@m zO2oxXc2(?tMK6XhfB?cWvy3@ON}}WVx`&UicTt|z`P`qQU(Hzz@QK7RW|%hd2Jy_M zZE)Tv4zZ%F5}y-Km~=tnN3JU#zi}?OEbz>bnNH0Uhls^O8!K(hil#<9O&n1*o$`f@ z$13M7&RV(3n)l={4CeHeWvu?swklh8&O(yQY@rsKiffFARHQ51Z&3$Bf^VJR@K<* zMuJ2G&G)?*WM+i?dH+kfbezUAuPZytysovgvT>@NQ*E5`vCgq^ij7n3ochk%8>gPE zJz09ObXYq0)3Od0f^|Vd@Lmo8QcwViiX$Y7p%{h{D1nj)bzeY%R3TO9ai4`IV+Gh; z<6h7yZv7cx{)iM>H31SM2#mnyUnWE`fuA6<&_n!xgtaqVcX>*{@LmfA@d@XJbtWDvjSU0pA z7KV1mTP~C+DMHF`fs7Q4@rAUqM+!L;h(w}>)87(r&*F}Ce@Y-$QaUa|iBc+*JiQb0 z1W-;d9}p>IK}A7~=(X1r1>3>)A?~|k&7Z^_jXS_Xijt~?C{glAL!hL_r%7PdSaM@c zqoIr+IJJ|NT6x$8kmnpss_rC?85_gCYql=9+M2UL}fmFwGV~K@xH`)%d7i@{#3cG<{ z8O}Gy_XXeADgFSE8Na0At*@ib5~u_whE0er^V1U{D5?U<4Ud)cZfqOGHKL<9{?AEkkRHmmth*2~Jz*?pt>dDyd4SpfVsE z(O3GmaJvX!KJWbeub=q!Z_4jJ6@Oa4rPlAj-%x!)WktkMY&hjuPrn5qIQtX8aVk|o z7Gy#s^nm?L-OljKO8i^6{{70QzkcHKj~C((AE|GDhrFKQI9-MF1zs=3+ckOHjMuK55f)QKlqwq?Q#gHFu-ehsk+mVcJ-Sm1 z!~(Sh3w)UXN1tYWI-la}CY&$A%N1U)#fL3# z7nUY0Q+z!@8dH2MOTltH7Ew?m#Ypj)!jVMLb8dtPqs5va)u9w$cEvh(ac{zUKr|V` z?PcGAFeav)dvG5hRYIlW{#^Sec!T9GEYtOv^L&n0mY{X` zdO+lah)NQl0LP>?ciZDA7!4=B%;=A`bY?l8T!+jttM1}s4m`w#Ql(-{5jo$3aW_gK z1ws*dAdKbSb%-=!=`(>@67Mwuru&pJeAH82|1SY0>lkOo5T^&oOk$K{q%cb`1sg2! z>|TcJv4c+c;{l_w7B(a+=>3F!a;002ovPDHLk FV1mra-NOI? literal 0 HcmV?d00001 diff --git a/cxgraph-web/static/icon/favicon320.png b/cxgraph-web/static/icon/favicon320.png new file mode 100644 index 0000000000000000000000000000000000000000..f2325aae019c8289c0cc77adc34936da24fee3c5 GIT binary patch literal 46687 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 LNkvXXu0mjfY57l} literal 0 HcmV?d00001 diff --git a/cxgraph-web/static/icon/favicon48.png b/cxgraph-web/static/icon/favicon48.png new file mode 100644 index 0000000000000000000000000000000000000000..824a54af5c06c685352a5a37c266209b753218b5 GIT binary patch literal 3409 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 literal 0 HcmV?d00001 diff --git a/cxgraph-web/static/icon/favicon64.png b/cxgraph-web/static/icon/favicon64.png new file mode 100644 index 0000000000000000000000000000000000000000..14d52bd0e656a39cd6222a95e15b02dea6d2d2fb GIT binary patch literal 4907 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 literal 0 HcmV?d00001 diff --git a/cxgraph-web/static/icon/favicon640.png b/cxgraph-web/static/icon/favicon640.png new file mode 100644 index 0000000000000000000000000000000000000000..721446efd9add54f3c1f65a1cd3a94436b5978fb GIT binary patch literal 135713 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 Dm4U%LoK6 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 FV1k?j@h$)W literal 0 HcmV?d00001 diff --git a/cxgraph-web/index.js b/cxgraph-web/static/index.js similarity index 85% rename from cxgraph-web/index.js rename to cxgraph-web/static/index.js index 8206c03..bced0f8 100644 --- a/cxgraph-web/index.js +++ b/cxgraph-web/static/index.js @@ -1,6 +1,6 @@ "use strict" -import init, * as cxgraph from "./pkg/cxgraph_web.js"; +import init, * as cxgraph from "../pkg/cxgraph_web.js"; await init(); let graphView = { @@ -38,6 +38,11 @@ function screenToCx(screen) { } } +function panView(dX, dY) { + graphView.xoff -= 2.0 * graphView.scale * dX / window.innerHeight; + graphView.yoff += 2.0 * graphView.scale * dY / window.innerHeight; +} + // // Canvas // @@ -65,29 +70,8 @@ function calcBounds() { } function onViewChange() { - let dim = { w: window.innerWidth, h: innerHeight }; let bounds = calcBounds(); cxgraph.set_bounds(bounds.x_min, bounds.y_min, bounds.x_max, bounds.y_max); - let origin = cxToScreen({ re: 0, im: 0 }); - let one = cxToScreen({ re: 1, im: 0 }); - - if(svg_axis_x.visibility != "hidden") { - svg_axis_x.setAttribute("x1", 0) - svg_axis_x.setAttribute("x2", dim.w); - svg_axis_x.setAttribute("y1", origin.y); - svg_axis_x.setAttribute("y2", origin.y); - } - if(svg_axis_y.visibility != "hidden") { - svg_axis_y.setAttribute("x1", origin.x); - svg_axis_y.setAttribute("x2", origin.x); - svg_axis_y.setAttribute("y1", 0); - svg_axis_y.setAttribute("y2", dim.h); - } - if(svg_unitcircle.visibility != "hidden") { - svg_unitcircle.setAttribute("cx", origin.x); - svg_unitcircle.setAttribute("cy", origin.y); - svg_unitcircle.setAttribute("r", one.x - origin.x); - } for(let point of graphPoints) { point.onViewChange(); @@ -96,18 +80,34 @@ function onViewChange() { tryRedraw(); } +function updateCoordinates() { + let cx = screenToCx({ x: mouseX, y: mouseY }); + let scale = -Math.floor(Math.log10(graphView.scale * 0.001)); + if (scale < 0) scale = 0; + let re = cx.re.toFixed(scale); + let im = (-cx.im).toFixed(scale); + mouse_pos.textContent = `${re} + ${im}i`; +} + function onResize() { let width = window.innerWidth; let height = window.innerHeight; cxgraph.resize(width*graphView.res_mult, height*graphView.res_mult); + cxgraph.set_res_scale(graphView.res_mult); canvas.style.width = "100vw"; canvas.style.height = "100vh"; onViewChange(); + updateCoordinates(); } function onWheel(e) { - graphView.scale *= Math.exp(e.deltaY * 0.0007); + let factor = Math.exp(e.deltaY * 0.0007); + let dX = window.innerWidth/2 - e.x; + let dY = window.innerHeight/2 - e.y; + panView(dX * (1 - factor), dY * (1 - factor)); + graphView.scale *= factor onViewChange(); + updateCoordinates(); } function onPointerDown(e) { @@ -124,19 +124,25 @@ function onPointerUp() { } function onPointerMove(e) { + let dX = e.offsetX - mouseX; + let dY = e.offsetY - mouseY; + mouseX = e.offsetX; + mouseY = e.offsetY; if(mousePressed) { - let dX = e.offsetX - mouseX; - let dY = e.offsetY - mouseY; - mouseX = e.offsetX; - mouseY = e.offsetY; - graphView.xoff -= 2.0 * graphView.scale * dX / window.innerHeight; - graphView.yoff += 2.0 * graphView.scale * dY / window.innerHeight; + panView(dX, dY); onViewChange(); } else { for(let point of graphPoints) { point.onPointerMove(e); } } + updateCoordinates(); +} + +function onKeyDown(e) { + if (e.key == "c" && e.ctrlKey) { + navigator.clipboard.writeText(mouse_pos.textContent); + } } window.addEventListener("resize", onResize); @@ -144,6 +150,8 @@ canvas.addEventListener("wheel", onWheel); canvas.addEventListener("pointerdown", onPointerDown); canvas.addEventListener("pointerup", onPointerUp); canvas.addEventListener("pointermove", onPointerMove); +canvas.addEventListener("pointermove", onPointerMove); +canvas.addEventListener("keydown", onKeyDown); // // Graph/redraw @@ -220,16 +228,18 @@ for(let e of nameColorMode) { nameColorMode[1].checked = true; cxgraph.set_coloring(1); -overlay_axes.addEventListener("change", () => { - let vis = overlay_axes.checked ? "visible" : "hidden"; - svg_axis_x.setAttribute("visibility", vis); - svg_axis_y.setAttribute("visibility", vis); -}); +let nameGridMode = document.getElementsByName("grid_mode"); +for(let e of nameGridMode) { + e.addEventListener("change", () => { + let selected = document.querySelector("input[name=grid_mode]:checked"); + cxgraph.set_grid_mode(parseInt(selected.getAttribute("data-value"))); + tryRedraw(); + }); + e.checked = false; +} +nameGridMode[2].checked = true; +cxgraph.set_grid_mode(2); -overlay_unitcircle.addEventListener("change", () => { - let vis = overlay_unitcircle.checked ? "visible" : "hidden"; - svg_unitcircle.setAttribute("visibility", vis); -}); // // Variables @@ -404,6 +414,7 @@ function addPoint() { button_slider_new.addEventListener("click", addSlider); button_point_new.addEventListener("click", addPoint); + // // Init // diff --git a/cxgraph-web/static/style.css b/cxgraph-web/static/style.css new file mode 100644 index 0000000..b463411 --- /dev/null +++ b/cxgraph-web/static/style.css @@ -0,0 +1,164 @@ +* { + font-family: monospace; + font-size: 16px; +} + +body, html { + height: 100%; + margin: 0; + padding: 0; + overflow: hidden; +} + +body.theme_dark { + --col-bg: #334; + --col-fg: #fff; + --col-error: #f9a; + --col-shadow: #0004; + --col-input: #667; + --col-input-border: #def; + --col-input-hover: #889; + --col-editor-bg: #445; + --col-editor-border: #223; + --col-trans-bg: #3344; +} + +body.theme_light { + --col-bg: #fff; + --col-fg: #223; + --col-error: #c24; + --col-shadow: #8884; + --col-input: #fff; + --col-input-border: #888; + --col-input-hover: #ddd; + --col-editor-bg: #eee; + --col-editor-border: #fff; + --col-trans-bg: #fff4; +} + +.canvas-container { + position: absolute; + left: 0px; + top: 0px; +} + +canvas, #overlay { + position: absolute; + left: 0px; + top: 0px; + width: 100vw; + height: 100vh; +} + +#canvas { + z-index: 0; + -webkit-transform: translate3d(0, 0, 0); +} + +#overlay { + z-index: 2; + pointer-events: none; +} + +#overlay_points { + pointer-events: all; +} + +.menus { + position: absolute; + left: 0px; + top: 0px; + right: 0px; + pointer-events: none; + display: flex; + flex-direction: row; + justify-content: space-between; + z-index: 10; +} + +.menu { + pointer-events: all; + margin: 10px; + padding: 10px; + background: var(--col-bg); + color: var(--col-fg); + height: fit-content; + box-shadow: 0 0 5px 1px #00000088; +} + +details > *:not(summary) { + padding-top: 2px; + padding-bottom: 2px; + padding-left: 8px; + border-left: 1px solid var(--col-fg); +} + +summary { + padding-bottom: 5px; +} + +.info_overlay { + position: absolute; + left: 0px; + bottom: 0px; + pointer-events: none; + z-index: 20; + + margin: 10px; + padding: 5px; + border-radius: 5px; + + background: #0004; + color: #fff; + box-shadow: 0 0 5px 1px #0004; +} + +#source_text { + width: 400px; + height: 150px; + font-size: 15px; + background-color: var(--col-editor-bg); + color: var(--col-fg); + border: none; /*var(--col-editor-border);*/ + padding: 5px; +} + +#div_error_msg { + color: var(--col-error); + white-space: pre-line; +} + +input { + color: var(--col-fg); + background: var(--col-input); + border: none; + border-radius: 2px; + margin-top: 2px; + margin-bottom: 2px; + padding-left: 3px; + padding-right: 3px; +} + +input, textarea{ + box-shadow: 0 0 5px 1px var(--col-shadow); +} + +input[type=number], input[type=text] { + border-bottom: 2px solid var(--col-input-border); +} + +input:hover { + background: var(--col-input-hover); +} + +input[type=button]:active { + background: var(--col-input); +} + +hr { + border-color: var(--col-input); +} + +fieldset { + border: 1px solid var(--col-input-border); +} diff --git a/cxgraph-web/static/themes.js b/cxgraph-web/static/themes.js new file mode 100644 index 0000000..5ab7cf2 --- /dev/null +++ b/cxgraph-web/static/themes.js @@ -0,0 +1,21 @@ +function themeChange() { + if (checkbox_theme.checked) { + body.classList.remove("theme_light"); + body.classList.add("theme_dark"); + } else { + body.classList.remove("theme_dark"); + body.classList.add("theme_light"); + } + localStorage.setItem("theme", checkbox_theme.checked ? "dark" : "light"); +} + +checkbox_theme.addEventListener("change", themeChange); + +if (localStorage.getItem("theme") !== null) { + if (localStorage.getItem("theme") == "light") { + checkbox_theme.checked = false; + } else { + checkbox_theme.checked = true; + } +} +themeChange(); diff --git a/cxgraph-web/style.css b/cxgraph-web/style.css deleted file mode 100644 index ff9c706..0000000 --- a/cxgraph-web/style.css +++ /dev/null @@ -1,110 +0,0 @@ -* { - font-family: monospace; - font-size: 16px; -} - -body, html { - height: 100%; - margin: 0; - padding: 0; - overflow: hidden; -} - -.canvas-container { - position: absolute; - left: 0px; - top: 0px; -} - -canvas, #overlay { - position: absolute; - left: 0px; - top: 0px; - width: 100vw; - height: 100vh; -} - -#canvas { - z-index: 0; - -webkit-transform: translate3d(0, 0, 0); -} - -#overlay { - z-index: 1; - pointer-events: none; -} - -#overlay_points { - pointer-events: all; -} - -.menus { - position: absolute; - left: 0px; - top: 0px; - right: 0px; - pointer-events: none; - display: flex; - flex-direction: row; - justify-content: space-between; - z-index: 10; -} - -.menu { - pointer-events: all; - margin: 10px; - padding: 10px; - background: #334; - color: #fff; - height: fit-content; - box-shadow: 0 0 5px 1px #00000088; -} - -details > *:not(summary) { - padding-top: 2px; - padding-bottom: 2px; - padding-left: 8px; - border-left: 1px solid #fff; -} - -summary { - padding-bottom: 5px; -} - -#source_text { - width: 400px; - height: 150px; - font-size: 15px; -} - -#div_error_msg { - color: #f9a; - white-space: pre-line; -} - -input { - color: #fff; - background: #667; - border: none; - border-radius: 2px; - margin-top: 2px; - margin-bottom: 2px; - padding-left: 3px; - padding-right: 3px; -} - -input, textarea{ - box-shadow: 0 0 5px 1px #00000044; -} - -input[type=number], input[type=text] { - border-bottom: 2px solid #def; -} - -input:hover { - background: #889; -} - -input[type=button]:active { - background: #667; -} diff --git a/docs/language.md b/docs/language.md index 305f917..3d22139 100644 --- a/docs/language.md +++ b/docs/language.md @@ -67,7 +67,8 @@ variable on the right. The equality operators `==` and `!=` compare two values, considering both their real and imaginary components. The comparison operators `>`, `<`, `>=`, and `<=` -only consider the real component. +only consider the real component. These all produce `0` if the equality or comparison +is false and `1` if it is true. `+`, `-`, and `*` also function as the unary plus, minus, and conugation operators. @@ -111,6 +112,12 @@ if(z > 0) { z^2 } { 2z } If the argument's real part is positive, the first body will be evaluated, and otherwise the second will be. +`while` can be used to repeat while a condition is met. Care should be taken to ensure the loop will always end eventually. + +``` +0 -> n, while(n < 10) { n + 1 -> n } +``` + ## Built-in functions and constants @@ -137,6 +144,9 @@ power/exponential functions: |----------------|-------------------------------------------| | `exp(z)` | Exponential function, equivalent to `e^z` | | `log(z)` | Natural logarithm | +| `log2(z)` | Logarithm base 2 | +| `log10(z)` | Logarithm base 10 | +| `logb(b,z)` | Logarithm base b | | `logbr(z,br)` | Natural logarithm with specified branch | | `pow(z)` | Power, equivalent to `^` | | `powbr(z,br)` | `pow` with specified branch | @@ -181,6 +191,11 @@ logic functions: | `absim(z)` | Absolute value of imaginary part | | `isnan(z)` | 1 if `z` is NaN, 0 otherwise | +other functions: +| function | description | +|--------------|----------------------------------| +| `mix(u,v,a)` | `u*(1-a) + v*a` | + constants: | name | description | |----------------|--------------------------------------------------------------------------------------------------------| diff --git a/docs/web.md b/docs/web.md index 0ed579f..14191dc 100644 --- a/docs/web.md +++ b/docs/web.md @@ -2,7 +2,9 @@ ## Source -Enter the program to plot into the text area. For more information, see [the language docs](language.md). +Enter the program to plot into the text area. For more information, see [the language docs](language.md). The tab key can be used to add indentation - to use tab to navigate out of the text area, press escape first. Special characters can be inserted with a backslash followed by: +- a digit 0-9 for a subscript +- a lowercase or uppercase Greek letter name (eg. `alpha` or `Zeta`) for that letter in the respective case The Graph button compiles the program and redraws the screen. This must be pressed after changes are made to the program to see them. This can also be accomplished by pressing `Shift`+`Enter` in the text area. @@ -10,7 +12,7 @@ The Redraw button redraws the screen. If Auto Redraw is enabled, the screen will ## The plot -Most of the screen is occupied by the plot. Click and drag with the mouse to move around, and use the scroll wheel to zoom in and out. +Most of the screen is occupied by the plot. Click and drag with the mouse to move around, and use the scroll wheel to zoom in and out. Press Ctrl+C while focused on the plot to copy the cursor's position to the clipboard. ## Options @@ -24,7 +26,7 @@ Contours can be toggled with the contour checkboxes. Real and imaginary contours Standard coloring directly maps argument to hue in HSV while keeping saturation and value constant. Uniform coloring uses a modified mapping that tries to avoid variation in perceptual brightness. None disables coloring entirely. -Draw Axes and Unit Circle enable or disable the axes and circle overlays. +The grid can be toggled on and off, or set to show the axes only. ## Variables diff --git a/libcxgraph/Cargo.toml b/libcxgraph/Cargo.toml index 2ebc43f..f80d053 100644 --- a/libcxgraph/Cargo.toml +++ b/libcxgraph/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libcxgraph" -version = "0.1.0" +version = "0.2.0" edition = "2021" build = "build.rs" @@ -12,7 +12,7 @@ log = "0.4" lalrpop-util = { version = "0.21.0", features = ["lexer", "unicode"] } num-complex = "0.4" wgpu = "22.1" -raw-window-handle = "0.6" +raw-window-handle = "0.6.2" unicode-xid = "0.2" [build-dependencies] diff --git a/libcxgraph/src/language/ast.rs b/libcxgraph/src/language/ast.rs index eaf1ca3..bf8d4e3 100644 --- a/libcxgraph/src/language/ast.rs +++ b/libcxgraph/src/language/ast.rs @@ -22,7 +22,7 @@ pub enum ExpressionType<'a> { Unary(UnaryOp), FnCall(&'a str), Store(&'a str), - If, + If, While, Sum { countvar: &'a str }, Prod { countvar: &'a str }, Iter { itervar: &'a str }, @@ -70,6 +70,13 @@ impl<'a> Expression<'a> { } } + pub fn new_while(cond: Self, body: Self) -> Self { + Self { + ty: ExpressionType::While, + children: vec![cond, body], + } + } + pub fn new_sum(countvar: &'a str, min: Self, max: Self, body: Self) -> Self { Self { ty: ExpressionType::Sum { countvar }, @@ -108,6 +115,7 @@ fn display_expr(w: &mut impl fmt::Write, expr: &Expression, depth: usize) -> fmt ExpressionType::FnCall(f) => write!(w, "{:indent$}CALL {f}", "", indent=indent)?, ExpressionType::Store(n) => write!(w, "{:indent$}STORE {n}", "", indent=indent)?, ExpressionType::If => write!(w, "{:indent$}IF", "", indent=indent)?, + ExpressionType::While => write!(w, "{:indent$}WHILE", "", indent=indent)?, ExpressionType::Sum { countvar } => write!(w, "{:indent$}SUM {countvar}", "", indent=indent)?, ExpressionType::Prod { countvar } => write!(w, "{:indent$}PROD {countvar}", "", indent=indent)?, ExpressionType::Iter { itervar } => write!(w, "{:indent$}ITER {itervar}", "", indent=indent)?, diff --git a/libcxgraph/src/language/builtins.rs b/libcxgraph/src/language/builtins.rs index 4af391e..82b9832 100644 --- a/libcxgraph/src/language/builtins.rs +++ b/libcxgraph/src/language/builtins.rs @@ -21,6 +21,11 @@ thread_local! { m.insert("abs", ("c_abs", 1)); m.insert("arg", ("c_arg", 1)); m.insert("argbr", ("c_argbr", 2)); + m.insert("diveu", ("c_diveu", 2)); + m.insert("mod", ("c_mod", 2)); + m.insert("floor", ("c_floor", 1)); + m.insert("ceil", ("c_ceil", 1)); + m.insert("round", ("c_round", 1)); m.insert("add", ("c_add", 2)); m.insert("sub", ("c_sub", 2)); @@ -31,6 +36,9 @@ thread_local! { m.insert("exp", ("c_exp", 1)); m.insert("log", ("c_log", 1)); + m.insert("log2", ("c_log2", 1)); + m.insert("log10", ("c_log10", 1)); + m.insert("logb", ("c_logb", 2)); m.insert("logbr", ("c_logbr", 2)); m.insert("sqrt", ("c_sqrt", 1)); m.insert("sqrtbr", ("c_sqrtbr", 2)); @@ -62,6 +70,8 @@ thread_local! { m.insert("lambertwbr", ("c_lambertwbr", 2)); m.insert("erf", ("c_erf", 1)); + m.insert("mix", ("c_mix", 3)); + m }; diff --git a/libcxgraph/src/language/compiler.rs b/libcxgraph/src/language/compiler.rs index 17c2bfb..f543fab 100644 --- a/libcxgraph/src/language/compiler.rs +++ b/libcxgraph/src/language/compiler.rs @@ -250,6 +250,20 @@ impl<'w, 'i, W: fmt::Write> Compiler<'w, 'i, W> { writeln!(self.buf, "}}")?; Ok(result) }, + ExpressionType::While => { + let res = local.next_tmp(); + writeln!(self.buf, "var {res}: vec2f;")?; + writeln!(self.buf, "loop {{")?; + + let cond = self.compile_expr(local, &expr.children[0])?; + writeln!(self.buf, "if {cond}.x <= 0.0 {{ break; }}")?; + + let mut loop_local = local.clone(); + let body = self.compile_expr(&mut loop_local, &expr.children[1])?; + writeln!(self.buf, "{res} = {body};")?; + writeln!(self.buf, "}}")?; + Ok(res) + } ExpressionType::Sum { countvar } | ExpressionType::Prod { countvar } => { let min = local.next_tmp(); diff --git a/libcxgraph/src/language/mod.rs b/libcxgraph/src/language/mod.rs index aaecb41..f9af07f 100644 --- a/libcxgraph/src/language/mod.rs +++ b/libcxgraph/src/language/mod.rs @@ -4,7 +4,7 @@ use lalrpop_util::lalrpop_mod; use crate::language::token::Lexer; -use self::{compiler::Compiler, ast::display_def}; +use self::{ast::display_def, compiler::Compiler, token::{LexerError, Token}}; mod token; mod ast; @@ -27,6 +27,10 @@ pub fn compile(src: &str, vars: &HashMap) -> Result Result, LexerError> { + Lexer::new(src).collect() +} + pub fn show_ast(src: &str) -> Result> { let lexer = Lexer::new(src); let result = syntax::ProgramParser::new() diff --git a/libcxgraph/src/language/syntax.lalrpop b/libcxgraph/src/language/syntax.lalrpop index 9417326..841d23b 100644 --- a/libcxgraph/src/language/syntax.lalrpop +++ b/libcxgraph/src/language/syntax.lalrpop @@ -32,6 +32,7 @@ extern { "prod" => Token::Prod, "iter" => Token::Iter, "if" => Token::If, + "while" => Token::While, Number => Token::Number(), Name => Token::Name(<&'input str>), } @@ -142,4 +143,6 @@ Item: Expression<'input> = { => Expression::new_iter(name, count, init, body), "if" "(" ")" => Expression::new_if(cond, t, f), + "while" "(" ")" + => Expression::new_while(cond, body), } diff --git a/libcxgraph/src/language/token.rs b/libcxgraph/src/language/token.rs index 4b82905..971b1d8 100644 --- a/libcxgraph/src/language/token.rs +++ b/libcxgraph/src/language/token.rs @@ -7,7 +7,7 @@ use unicode_xid::UnicodeXID; pub enum Token<'i> { Number(f64), Name(&'i str), - Sum, Prod, Iter, If, + Sum, Prod, Iter, If, While, LParen, RParen, LBrace, RBrace, Plus, Minus, Star, Slash, Caret, @@ -26,6 +26,7 @@ impl<'i> fmt::Display for Token<'i> { Token::Prod => f.write_str("prod"), Token::Iter => f.write_str("iter"), Token::If => f.write_str("if"), + Token::While => f.write_str("while"), Token::LParen => f.write_str("("), Token::RParen => f.write_str(")"), Token::LBrace => f.write_str("{"), @@ -124,6 +125,7 @@ impl<'i> Lexer<'i> { "prod" => Ok((i, Token::Prod, j)), "iter" => Ok((i, Token::Iter, j)), "if" => Ok((i, Token::If, j)), + "while" => Ok((i, Token::While, j)), _ => Ok((i, Token::Name(s), j)), } } diff --git a/libcxgraph/src/renderer/fragment.wgsl b/libcxgraph/src/renderer/fragment.wgsl index a3d4324..3ce636b 100644 --- a/libcxgraph/src/renderer/fragment.wgsl +++ b/libcxgraph/src/renderer/fragment.wgsl @@ -7,10 +7,12 @@ struct Uniforms { resolution: vec2u, bounds_min: vec2f, bounds_max: vec2f, + res_scale: f32, shading_intensity: f32, contour_intensity: f32, decoration: u32, coloring: u32, + grid_mode: u32, } @group(0) @binding(1) var uniforms: Uniforms; @@ -24,6 +26,7 @@ const E = 2.718281828459045; const RECIP_SQRT2 = 0.7071067811865475; const LOG_TAU = 1.8378770664093453; const LOG_2 = 0.6931471805599453; +const LOG_10 = 2.302585092994046; const RECIP_SQRT29 = 0.18569533817705186; const C_TAU = vec2f(TAU, 0.0); @@ -43,11 +46,19 @@ fn remap(val: vec2f, a1: vec2f, b1: vec2f, a2: vec2f, b2: vec2f) -> vec2f { return a2 + (b2 - a2) * ((val - a1) / (b1 - a1)); } -fn correct_mod(x: f32, y: f32) -> f32 { +fn screen2cx(pos: vec2f) -> vec2f { + return remap(pos, C_ZERO, vec2f(uniforms.resolution), uniforms.bounds_min, uniforms.bounds_max); +} + +fn cx2screen(z: vec2f) -> vec2f { + return remap(z, uniforms.bounds_min, uniforms.bounds_max, C_ZERO, vec2f(uniforms.resolution)); +} + +fn emod(x: f32, y: f32) -> f32 { return ((x % y) + y) % y; } -fn correct_mod2(x: vec2f, y: vec2f) -> vec2f { +fn emod2(x: vec2f, y: vec2f) -> vec2f { return ((x % y) + y) % y; } @@ -151,6 +162,20 @@ fn c_recip(v: vec2f) -> vec2f { return vec2(v.x, -v.y) / dot(v, v); } +fn c_diveu(u: vec2f, v: vec2f) -> vec2f { + let z = c_div(u, v); + return floor(z); +} + +fn c_mod(u: vec2f, v: vec2f) -> vec2f { + let z = c_diveu(u, v); + return u - c_mul(z, v); +} + +fn c_floor(z: vec2f) -> vec2f { return floor(z); } +fn c_ceil(z: vec2f) -> vec2f { return ceil(z); } +fn c_round(z: vec2f) -> vec2f { return round(z); } + fn c_exp(z: vec2f) -> vec2f { return exp(z.x) * vec2(cos(z.y), sin(z.y)); } @@ -159,6 +184,18 @@ fn c_log(z: vec2f) -> vec2f { return vec2(0.5 * log(dot(z, z)), c_arg(z).x); } +fn c_log2(z: vec2f) -> vec2f { + return c_log(z)/LOG_2; +} + +fn c_log10(z: vec2f) -> vec2f { + return c_log(z)/LOG_10; +} + +fn c_logb(b: vec2f, z: vec2f) -> vec2f { + return c_div(c_log(z), c_log(b)); +} + fn c_logbr(z: vec2f, br: vec2f) -> vec2f { return vec2(0.5 * log(dot(z, z)), c_argbr(z, br).x); } @@ -213,7 +250,7 @@ fn c_tanh(z: vec2f) -> vec2f { fn c_asin(z: vec2f) -> vec2f { let m = select(-1.0, 1.0, z.y < 0.0 || (z.y == 0.0 && z.x > 0.0)); - let u = c_sqrt(vec2(1.0, 0.0) - c_mul(z, z)); + let u = c_sqrt(C_ONE - c_mul(z, z)); let v = c_log(u + m*vec2(-z.y, z.x)); return m*vec2(v.y, -v.x); } @@ -221,27 +258,27 @@ fn c_asin(z: vec2f) -> vec2f { // TODO fix fn c_acos(z: vec2f) -> vec2f { let m = select(-1.0, 1.0, z.y < 0.0 || (z.y == 0.0 && z.x > 0.0)); - let u = c_sqrt(vec2(1.0, 0.0) - c_mul(z, z)); + let u = c_sqrt(C_ONE - c_mul(z, z)); let v = c_log(u + m*vec2(-z.y, z.x)); return C_TAU/4.0 + m*vec2(-v.y, v.x); } fn c_atan(z: vec2f) -> vec2f { - let u = vec2(1.0, 0.0) - vec2(-z.y, z.x); - let v = vec2(1.0, 0.0) + vec2(-z.y, z.x); + let u = C_ONE - vec2(-z.y, z.x); + let v = C_ONE + vec2(-z.y, z.x); let w = c_log(c_div(u, v)); return 0.5 * vec2(-w.y, w.x); } fn c_asinh(z: vec2f) -> vec2f { let m = select(-1.0, 1.0, z.x > 0.0 || (z.x == 0.0 && z.y > 0.0)); - let u = c_sqrt(vec2(1.0, 0.0) + c_mul(z, z)); + let u = c_sqrt(C_ONE + c_mul(z, z)); return c_log(u + z*m) * m; } fn c_acosh(z: vec2f) -> vec2f { let b = select(0.0, TAU, z.x < 0.0 || (z.x == 0.0 && z.y < 0.0)); - let u = c_sqrtbr(vec2(-1.0, 0.0) + c_mul(z, z), vec2(b, 0.0)); + let u = c_sqrtbr(-C_ONE + c_mul(z, z), vec2(b, 0.0)); return c_log(u + z); } @@ -255,7 +292,7 @@ fn c_loggamma(z: vec2f) -> vec2f { let reflect = z.x < 0.5 && abs(z.y) < 13.0; var zp = z; if reflect { - zp = vec2(1.0, 0.0) - z; + zp = C_ONE - z; } var w = c_loggamma_inner2(zp); if reflect { @@ -270,8 +307,8 @@ fn c_loggamma_inner(z: vec2f) -> vec2f { } fn c_loggamma_inner2(z: vec2f) -> vec2f { - let w = c_loggamma_inner(z + vec2(3.0, 0.0)); - let l = c_log(z) + c_log(z + vec2(1.0, 0.0)) + c_log(z + vec2(2.0, 0.0)); + let w = c_loggamma_inner(z + 3*C_ONE); + let l = c_log(z) + c_log(z + C_ONE) + c_log(z + 2*C_ONE); return w - l; } @@ -291,7 +328,7 @@ fn c_digamma(z: vec2f) -> vec2f { let reflect = z.x < 0.5 && abs(z.y) < 13.0; var zp = z; if reflect { - zp = vec2(1.0, 0.0) - z; + zp = C_ONE - z; } var w = c_digamma_inner2(zp); if reflect { @@ -309,8 +346,8 @@ fn c_digamma_inner(z: vec2f) -> vec2f { } fn c_digamma_inner2(z: vec2f) -> vec2f { - let w = c_digamma_inner(z + vec2(3.0, 0.0)); - let l = c_recip(z + vec2(2.0, 0.0)) + c_recip(z + vec2(1.0, 0.0)) + c_recip(z); + let w = c_digamma_inner(z + 3*C_ONE); + let l = c_recip(z) + c_recip(z + C_ONE) + c_recip(z + 2*C_ONE); return w - l; } @@ -379,13 +416,17 @@ const ERF_A3 = 1.4214137412; const ERF_A4 = -1.4531520268; const ERF_A5 = 1.0614054292; fn c_erf_plus(z: vec2f) -> vec2f { - let t = c_recip(vec2(1.0, 0.0) + ERF_P * z); + let t = c_recip(C_ONE + ERF_P * z); let m = c_exp(-c_mul(z, z)); let r = c_mul(t, vec2f(ERF_A1, 0.0) + c_mul(t, vec2f(ERF_A2, 0.0) + c_mul(t, vec2f(ERF_A3, 0.0) + c_mul(t, vec2f(ERF_A4, 0.0) + t * ERF_A5)))); - return vec2f(1.0, 0.0) - c_mul(m, r); + return C_ONE - c_mul(m, r); +} + +fn c_mix(u: vec2f, v: vec2f, a: vec2f) -> vec2f { + return c_mul(u, C_ONE - a) + c_mul(v, a); } ///////////////// @@ -463,43 +504,38 @@ fn coloring_none(z: vec2f) -> vec3f { } fn decoration_contour_re(z: vec2f) -> f32 { - return correct_mod(floor(z.x), 2.0) * 2.0 - 1.0; + return emod(floor(z.x), 2.0) * 2.0 - 1.0; } fn decoration_contour_im(z: vec2f) -> f32 { - return correct_mod(floor(z.y), 2.0) * 2.0 - 1.0; + return emod(floor(z.y), 2.0) * 2.0 - 1.0; } fn decoration_contour_arg(z: vec2f) -> f32 { let arg = c_arg(z).x; - return round(correct_mod(arg + TAU, TAU/8.0) * 8.0/TAU) * 2.0 - 1.0; + return round(emod(arg + TAU, TAU/8.0) * 8.0/TAU) * 2.0 - 1.0; } fn decoration_contour_mag(z: vec2f) -> f32 { let logmag = 0.5 * log2(z.x*z.x + z.y*z.y); - return round(correct_mod(0.5 * logmag, 1.0)) * 2.0 - 1.0; + return round(emod(0.5 * logmag, 1.0)) * 2.0 - 1.0; } -@fragment -fn main(@builtin(position) in: vec4f) -> @location(0) vec4f { - let pos = vec2(in.x, f32(uniforms.resolution.y) - in.y); - let w = remap(pos, vec2(0.0, 0.0), vec2f(uniforms.resolution), uniforms.bounds_min, uniforms.bounds_max); - - let z = func_plot(w); - - var col = vec3f(); +fn color_result(z: vec2f) -> vec3f { switch uniforms.coloring { - case 0u, default: { - col = coloring_standard(z); + case 0u: { + return coloring_standard(z); } - case 1u: { - col = coloring_uniform(z); + case 1u, default: { + return coloring_uniform(z); } case 2u: { - col = coloring_none(z); + return coloring_none(z); } } +} +fn contour_result(z: vec2f) -> f32 { var contours = 1.0; if (uniforms.decoration & 0x01u) != 0u { @@ -522,7 +558,62 @@ fn main(@builtin(position) in: vec4f) -> @location(0) vec4f { contours = 0.0; } - let final_col = mix(col, vec3f(contours * 0.5 + 0.5), uniforms.contour_intensity); + return contours; +} + +fn grid_ortho(pos: vec2f) -> f32 { + let gt = ceil(uniforms.res_scale); + let z0 = screen2cx(pos - vec2f(gt/2)); + let z1 = screen2cx(pos + vec2f(gt/2)); + + let p0 = cx2screen(vec2(0.0, 0.0)) / uniforms.res_scale; + let p1 = cx2screen(vec2(1.0, 1.0)) / uniforms.res_scale; + + let gs = 64.0/pow(4.0, floor(-0.5 + log2(p1.x - p0.x)/2)); + let gs2 = gs/4.0; + + if (emod(z0.x, gs) > emod(z1.x, gs) || emod(z0.y, gs) > emod(z1.y, gs)) { + return 0.7; + } + if (emod(z0.x, gs2) > emod(z1.x, gs2) || emod(z0.y, gs2) > emod(z1.y, gs2)) { + return 0.25; + } + return 0.0; +} + +fn grid_axes(pos: vec2f) -> f32 { + let gt = ceil(uniforms.res_scale); + let z0 = screen2cx(pos - vec2f(gt/2)); + let z1 = screen2cx(pos + vec2f(gt/2)); + + if ((sign(z0.x) <= 0 && sign(z1.x) > 0) || (sign(z0.y) <= 0 && sign(z1.y) > 0)) { + return 0.7; + } + return 0.0; +} + +@fragment +fn main(@builtin(position) in: vec4f) -> @location(0) vec4f { + let pos = vec2(in.x, f32(uniforms.resolution.y) - in.y); + let z = screen2cx(pos); + + let w = func_plot(z); + + let col = color_result(w); + let contours = contour_result(w); + let plot_col = mix(col, vec3f(contours * 0.5 + 0.5), uniforms.contour_intensity); + + var grid_val = 0.0; + switch (uniforms.grid_mode) { + case 0u, default {} + case 1u { + grid_val = grid_axes(pos); + } + case 2u { + grid_val = grid_ortho(pos); + } + } + let final_col = mix(plot_col, vec3(0.0), grid_val); return vec4f(pow(final_col, vec3(1.68)), 1.0); } diff --git a/libcxgraph/src/renderer/mod.rs b/libcxgraph/src/renderer/mod.rs index 181a1f5..a6b902c 100644 --- a/libcxgraph/src/renderer/mod.rs +++ b/libcxgraph/src/renderer/mod.rs @@ -1,6 +1,6 @@ use std::{num::NonZeroU64, io::Cursor}; -use wgpu::{util::DeviceExt, MemoryHints}; +use wgpu::util::DeviceExt; #[derive(Debug)] #[repr(C)] @@ -9,11 +9,12 @@ pub struct Uniforms { pub resolution: (u32, u32), pub bounds_min: (f32, f32), pub bounds_max: (f32, f32), + pub res_scale: f32, pub shading_intensity: f32, pub contour_intensity: f32, pub decorations: u32, pub coloring: u32, - _padding: [u8; 8], + pub grid_mode: u32, } const UNIFORM_SIZE: usize = std::mem::size_of::(); @@ -29,10 +30,12 @@ impl Uniforms { buf.write_all(&self.bounds_min.1.to_le_bytes())?; buf.write_all(&self.bounds_max.0.to_le_bytes())?; buf.write_all(&self.bounds_max.1.to_le_bytes())?; + buf.write_all(&self.res_scale.to_le_bytes())?; buf.write_all(&self.shading_intensity.to_le_bytes())?; buf.write_all(&self.contour_intensity.to_le_bytes())?; buf.write_all(&self.decorations.to_le_bytes())?; buf.write_all(&self.coloring.to_le_bytes())?; + buf.write_all(&self.grid_mode.to_le_bytes())?; Ok(()) } } @@ -70,11 +73,11 @@ impl<'a> WgpuState<'a> { max_texture_dimension_2d: 8192, ..wgpu::Limits::downlevel_webgl2_defaults() }, - memory_hints: MemoryHints::Performance, + memory_hints: wgpu::MemoryHints::default(), }, None ).await.map_err(|e| e.to_string()).unwrap(); - + let format = surface.get_capabilities(&adapter).formats[0]; let config = wgpu::SurfaceConfiguration { @@ -135,11 +138,12 @@ impl<'a> WgpuState<'a> { resolution: size.into(), bounds_min: (-0.0, -0.0), bounds_max: ( 0.0, 0.0), + res_scale: 1.0, shading_intensity: 0.0, contour_intensity: 0.0, decorations: 0, coloring: 0, - _padding: [0; 8], + grid_mode: 0, }; Self { @@ -239,7 +243,6 @@ impl<'a> WgpuState<'a> { rpass.set_pipeline(pipeline); rpass.set_bind_group(0, &self.uniform_bind_group, &[]); rpass.draw(0..3, 0..1); - rpass.draw(1..4, 0..1); } } let mut cursor = Cursor::new([0; UNIFORM_SIZE]); diff --git a/libcxgraph/src/renderer/vertex.wgsl b/libcxgraph/src/renderer/vertex.wgsl index 8fac842..70a5dda 100644 --- a/libcxgraph/src/renderer/vertex.wgsl +++ b/libcxgraph/src/renderer/vertex.wgsl @@ -1,10 +1,9 @@ @vertex fn main(@builtin(vertex_index) in_vertex_index: u32) -> @builtin(position) vec4f { - var pos = array( + var pos = array( vec2(-1.0,-1.0), - vec2( 1.0,-1.0), - vec2(-1.0, 1.0), - vec2( 1.0, 1.0), + vec2( 3.0,-1.0), + vec2(-1.0, 3.0), ); return vec4f(pos[in_vertex_index], 0.0, 1.0);