From 43fc8e94ebcf38db4d52a9750d7007ed272fd7e1 Mon Sep 17 00:00:00 2001
From: Alexander Rose <alex.rose@rcsb.org>
Date: Tue, 27 Mar 2018 18:24:23 -0700
Subject: [PATCH] require shaders from files using glslify and webpack

---
 package-lock.json             | Bin 394484 -> 418006 bytes
 package.json                  |  15 ++++++++++-----
 src/apps/render-test/state.ts |  27 +++++++++------------------
 src/mol-gl/camera.ts          |   3 ---
 src/mol-gl/shader/point.frag  |   3 +++
 src/mol-gl/shader/point.vert  |  10 ++++++++++
 tsconfig.json                 |  11 ++++++-----
 webpack.config.js             |  14 ++++++++++++++
 8 files changed, 52 insertions(+), 31 deletions(-)
 create mode 100644 src/mol-gl/shader/point.frag
 create mode 100644 src/mol-gl/shader/point.vert
 create mode 100644 webpack.config.js

diff --git a/package-lock.json b/package-lock.json
index df4d12aac59e87d7c5b3d2ca578886a074b52f2e..9a14a78b688d55a4ea47254ba66718067ba6db43 100644
GIT binary patch
delta 7167
zcmd^Edu&_hb;o_#vt-GVWjPipS+Zoy(qxL{<=cQ0Q+!E$lOicnNtW<&MPBjp{U*}H
zK~kp)V%IL4oESyZddO0sO#(UHtYJ-pcu3YYz)(A0+AU}{JAu1Dw$xUaZZlFR`|hP4
zRO<aPxEqj70)+dW@80iqe&6r>&e11N?)lk;z9r^;c=ZwNE<!e`gOvuU=!kGqi8R7V
zkYQ5QIJ<X9T(J~YOxa*o#|>J4I<H+U*Q?Xa%;JpM1Lsyq%NF^hY*L|wOXK(<_@h_w
zHrVqCwg+y!kM+Q@5Izo$m+&r32Ks(%OvEPGg4CAE=%!*5hHzOMGP1r@CFs=@;lgW#
z2;RJf^}=T|><>X^!AKkpd-YE#4Lp1gIYbHbz@u?$WI!%4aq+lPR-W+`?X_HPqO5Y*
zypfWlU=CK`>d$aJSZK_RW<BjAdf`SFPQgPR`1UQbNjX|9=r7?T@a7(Te9f@WK^%t5
zzaaZp4UHA^0dc4_V=SA@bi`80)D~(c#}u8PHak2MSr4q7#I!$*zW-2$$krBMXciMU
zx~{8xqZ!m>Ii`S4as9dBxxOEcJx)@-*;#9>Vwk2i(u9ef;u6VVXfC19hus<NjNVtZ
z2UWqM)e}#qU1b-O$a_sildoWjNvE87x?Eb6`Mq)5ltHSJxt(5zqBfiGSgf#bFQtaR
z_$tu{+<A27pZ+t}2EVmq{q5;YsxW+bXjnEW1IJD3(DJtl>fg64e=vjn!J)>Lqat{6
z9NP}*2k^1GVx=s{RGB=D*1i5Lk-^I2#Qwf&!WY%0mF0pz707v`UR5|0RNF!}2gu$f
z)$sA_SPudL`u)9wpeu<{*k%l%Y1S~X;P#n)<@p(<(o{(}LbPIbN~N5O=;N{E{~89C
zKPX`y4atQU7&!L`!u`+-xVn2G%p3TtwE6@$p2J7QT)q&DCFp$4ud~SX<~m!i7q#kn
zsnSw`bB|F@@W-)!81KN_;iEHTH*~16tuSzr*b0xtu`c+Qi5$7(8+PSgVsQD;%h+G<
zz|%1}&5>f5zksPa*);MyzhL13hCJk`h%F|wnR-%_w^&sH^#Z3zh87E!g3Im#`MabF
zeldh?6C-%3C+XosZ9}U+!_iDC6;8*PJm^1fzO@fJEMzCV^dTVu?LKS=;u|$!N61mJ
z)!?3(PqPK1nJ%$rJ129^O&A=hU`|_s(^m*7yxK>NLgq<A16?Aj4;mj+qhi^tMU&5j
zoT+)+qTI`<xpIJGU0&_H(j;8W<zK&sU4E>KD{vAvy~sq1k{E;b)#yIlC-6!m`x|;Z
z{>5(L(%#0}$kL-?g*R8I6wK0Et?ZK;ty9yMP+jI^Xrs;p-APj2i{>h3l1zGS#t4^*
zCc*O$)UKVw!l2FGLNU*#;~;;L=<VDvvvqV>o(eHY@;3O+d2%0^C74nyypm@M8LrGA
z=d?B<djvx+@|Vj|mC4D>)~1SHPc^Q0#tdn;94o>~2H)K{H981C=%CuR2yRlq1IMvm
zjD|Ngl#I6z3!dn{4{>ZZMs9`9PO4onEuBPzE9L{LcxfT+EUI-nUon(*(%zUqAXoU|
z(ofddddoGc3!EP!eBRFyonRlq4ngo5)rn>~<)+5OnsT_RonM@)Io0KSs1TeFBR2DA
zrmEqj;H=(_V~~Uk1vZ{eG3jE%^Y<cn?|Doqzil_quea}z&;n_RvaxussGOazl-N|s
zSfe>>Fr`WbUHW-A_Y6ML)$;WQIJ$zk`oI@^HgM5&q3}AK{SgW*ZW`a!r%dK@fs`+_
zXs#uujeea>Uz@dtgA-W@ze)%mxSgk4YzUp`-8YH8hU_B}PIZy=$fh-9i;2zKMei3A
zaAg4-70+mci^h^oXAQ8XqRnQnnGH&vYC0PXc^a2w!yTIj0@>FQzYMXsdUTV$fI`(e
zyw*0!8{tNZI4Ck|leR)F6bdWta!zAUFGSPqbh+-EnT898an<gYu{Io7fU7THy_=7j
zU-h}Ch+Vr|Z$vhaCeIgHrXbvk)-Qy0!N4wRaA(ULt5+JjuHyaZ#MG?_S?v=p-{v!G
z?E&mbd_NKqN{@MAE@YfCc;m@@IFqt2OfM)hWslw{9A4YTq>V>U41@b2OfA{4Nj6r#
zd8!RNtUQg6ie`-pBW+Aq<o2M&T$Kfq3s!5Ha~s%f<Mip>ur!KyZsW;FIC+qM9UHhU
z5N_k8<^l0Q5M_ck7vt0>y{3t1$tU$LmW_&l$CdJE8Y>U~&LqEjgWN0Zrxoo@ZrZ$;
zRlef)A)fPlVs>Rfr_wr2X{&c`K0d?L7w25Ft_qK}?HfnK)*Dy1^zpHfgg1^8ZE$}l
zHa6JW&*V4FBM>0=1knRaL99m<jXS3OtkPHw=IcTIRKOB2nz9v5O`&O=zOI6MZ&KR@
zmO6ctn!MwP_@&XD7k)rY@_TQG$F~ywn5uErsDk@f$X(5|_z5v8_Jm8(d5tX=s2My_
zzsWTn%&NIe-Iw>r8*<B0ID8M*)6o>{s}cLzUz3CI+q=pA&CqkMjESKADXO!v-8<IJ
zdyHMEt-1<5K`ub`G>+ceBl4;jU2{@{#SjSOvJ+Lhnp^OBDlr<x2A&i~B3x5?qBNpa
z8weO!4QTL>XUJZG#?i=<NGToT82%#~B^1gpe#F0mc&`Abjv(Uwd^<%!=0B)C(Dmmi
zY+baFZ7}Y@wr?+ni)>Vq%EU?>14GBDUI8o=uTfNd@Ed{2yQ%%~z$^H+JIqsdLwh?)
zcCxpS=sWf_ihM3N^*y+98EgMiBryN8U=p}s&8v+^N09D%j_QQL@8V<oRzbDu@C|IO
z8c+boJ|*^xn1G^c30d^aOemb0XT!$nU?6QU7Nju&U_AnoTIC%IAef%)Z4DJds7Ce`
z1^!=zqMp`J6l0o%s{cOGyF(a%RkZP;aOo+c_rD|M+Sm5UNB5QQ<05$YB}_TcVqFt4
zYtWX+VJSln_sb=Q+KjB`$}w)AG^oqF?F$uGX^siYEu6rAN6r)CEvrI3{2tNUWZu?W
z)wi*Fo?4r?O3ur4xcC@00R#771KU#Jtb}7zY*Dy~FwjADG%jB2TlXE83C9}xy9eOL
zhbW~ydH^5qZ}NeJ?^$PXe)+rs9%b>-XZK)aA5$qsr)<i2c)Dl_S95Wl-lvn!mlySd
zRHg(@fe-!_AAI7iqxkY$M+wytl3xg%ZA0wC3*TMqYeV>0dxqQ`c~GQQa0z|2;x=Yv
zdW+N^h^UL1V1PB)>u`1nQ$gFmU~Pl~CHZ_og2<$!aIS;eizz@*xwrm~=tR$gye*Wh
zi9oQPtW<r4c*R$r$XHYEq%BxuLH;!)Z;u|p4#K?@J_?WcvEJq1e1-VRQ3$_)678;=
zSZ8DJ^)VsEMl0kq?ZzqDsEE#}b?JIuB~OQ}mWWlCcGmRCT(oX83yvFl5Z?(8dQjGV
z;yrTb|KG~Va`p}4<!+Kq7qW2r47wUaUnNO6{2I~LxPD*^GAQNU!*`<84V`W#BIIzZ
z23Yzb3UoSeKx>+-_yZBEv0%|;V-<(WZqA3&6M`0j=YLFWT}G)h8zOS03}jy<_CIri
zq{XOFWF$z{FyRy$y0s}du+G>R&f&2Z=9Ke_X+x-FEvDw&Ty5G1r=6(IGU%q-;K9#O
zUhck0@pUsLoW-!;lL*;;k=P9%51~|Q?L5@{S%^>_>&kI*Ok}f#b1Iq5DJ!_L_BtKV
zCLD59^l<6xE&14&p?cO5eEt@((RcTwi^dBXw9!*N#3+*Hv~<oAGMWO@g}B_NiI`}5
zmbK01Oa@h9UC0b?5;E)MhiZ{Y$5t5+9v#N_!$yj_rbyL7iVFA>#JD(8);MfQy11C)
z*s4_@aVYBPQihSsGR>)O`B4FeufpKNGVp9A#7#OlK29EO-x{t6+$YH0H_oFvKz`LC
z(BoPIzLO(+1=(aY%IxYAZPQ1&6dg=xbc%S!#M!b;xY1o6S$<nd(vfXpj>}XeDCj(s
zBl}@mg3;naV%^BgvDT(g2oQS$Iz!YTuhUcdx;|@n1WSohK9TWef_m^gPmV1A+q2|H
z61*I4mZ`cJbm4yVExfI9-`=r-LQ^&|<uG5fYH6W5Fx~L%9u^gKPG?-1RFvk@s`;r}
ze8In{)G*dXby_F|_3)81#>AO)Q}v<Gv;qNdTkmMBygh*K3*G4cD>eM()7WlQY875P
z%VPV*#-y|w4QOi#MR2Z`_lK*dtUlsIhp2N1{yub`YHt|-sS92?Lv4ZYoxnQa?UQ5|
zJdi*_@K-;_yP)eN*4}XZcn2(9LK5t$6DVZOoJ88}=<BHRboX<V1YS9Xbz^dPI8N~h
zOUnZj26si{n~fCIF_~<_U6#f2AubV?fq>5!zkzDeuXj*8;nUBE?cnfJhv3#X(1>9z
zH7<5)ZOY_?)+evIYq4Si)hTGR)9cSgOf$_I)TOt`E$v%Z#i$^GjxA9nNIeuixO&1(
znYwY}%{Gz&-Ae>71FX7SD6aK{7oCP#XE|ZeI;Qj0l7e=J1PKIzZxdtNQPFn&%weCL
z5bs98uT?#-l_2#ld>4HFHLOplD{ft*Q@H`}?QP}3wb5j7>^*XD@9$i);Z5M<HT<p?
z#5BLA5ih!KQhU}3vIPehj00=Y7{OrAYBUyW4W6lpJU62>MRcb4lqbL>RdICPgS8C=
zz@PmwBFCj`1O+diz&iWold4I1%U*d77-kBkBFmv_!aFFiT>m+~gOH=u$oo;re*+cn
zi&#%%DRB^9K85WBZxa2<{*t&$JV$E-Ua8NkFU?n!exunCQKh4?aH;4|Zbro}c*lq!
zb{~t%T|6q#Bq|915{0HjIy14zvDpbzD3sSk42np7-ke{s=M^Slhz9pJZE$S}Rbp;j
zN2&3RT?7g45o`?p<eU6baBN%@4@~>!Tr&=~P?Z*C!L+wl(OVZ(*7+c>Or&t;6KwcS
z{=@QR3N-Ib;~lWWii-p{V*4;P$oh$9>)c7~fT)rzPk9Sj@4}R~s*C0AN-i3)DJB?)
kjE{;3q05e|;g%Iw+}VG8{tv{gCocb#T)zBMYM<&q0l2kHz5oCK

delta 115
zcmV-(0F3|E!5Q?47_ep9vjyLJZ?_#+0R}9$*oOg0H@A4f0mcuvJJbQugNL$r0=Kev
z12jFiBew&2K(}A~1FI32dTIm@mr(o!442?~0R^`Q4+KeBw|{U1Knu5!d;~FKx0v4q
V;w`u25e5DVhq)^Sx4A0@9W_f^FGc_W

diff --git a/package.json b/package.json
index 6329b7aac..db448a52d 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
   "scripts": {
     "lint": "tslint src/**/*.ts",
     "build": "tsc",
+    "postbuild": "copyfiles --up 1 src/mol-gl/shader/*.vert src/mol-gl/shader/*.frag build/node_modules/",
     "watch": "tsc -watch",
     "test": "jest",
     "script": "node build/node_modules/script.js",
@@ -31,13 +32,14 @@
       "build/node_modules"
     ],
     "moduleNameMapper": {
-      "mol-task($|/.*)": "<rootDir>/src/mol-task$1",
-      "mol-comp($|/.*)": "<rootDir>/src/mol-comp$1",
-      "mol-util($|/.*)": "<rootDir>/src/mol-util$1",
       "mol-data($|/.*)": "<rootDir>/src/mol-data$1",
-      "mol-math($|/.*)": "<rootDir>/src/mol-math$1",
+      "mol-gl($|/.*)": "<rootDir>/src/mol-gl$1",
       "mol-io($|/.*)": "<rootDir>/src/mol-io$1",
-      "mol-model($|/.*)": "<rootDir>/src/mol-model$1"
+      "mol-math($|/.*)": "<rootDir>/src/mol-math$1",
+      "mol-model($|/.*)": "<rootDir>/src/mol-model$1",
+      "mol-ql($|/.*)": "<rootDir>/src/mol-ql$1",
+      "mol-task($|/.*)": "<rootDir>/src/mol-task$1",
+      "mol-util($|/.*)": "<rootDir>/src/mol-util$1"
     },
     "testRegex": "\\.spec\\.ts$"
   },
@@ -53,7 +55,10 @@
     "@types/react": "^16.0.4",
     "@types/react-dom": "^16.0.4",
     "benchmark": "^2.1.4",
+    "copyfiles": "^2.0.0",
+    "glslify-loader": "^1.0.2",
     "jest": "^22.4.2",
+    "raw-loader": "^0.5.1",
     "regl": "git+https://github.com/regl-project/regl.git#45c6ec570232420fca21567499c9c5a2a054432e",
     "rollup": "^0.56.2",
     "rollup-plugin-buble": "^0.19.2",
diff --git a/src/apps/render-test/state.ts b/src/apps/render-test/state.ts
index 36f9c6192..b5d995ae3 100644
--- a/src/apps/render-test/state.ts
+++ b/src/apps/render-test/state.ts
@@ -9,6 +9,9 @@ import * as glContext from 'mol-gl/context'
 import { Camera } from 'mol-gl/camera'
 import { Vec3 } from 'mol-math/linear-algebra'
 
+const pointVert = require('mol-gl/shader/point.vert')
+const pointFrag = require('mol-gl/shader/point.frag')
+
 export default class State {
     regl: REGL.Regl
 
@@ -28,33 +31,21 @@ export default class State {
             center: Vec3.create(0, 0, 0)
         })
 
-        const drawTriangle = regl({
-            frag: `
-            void main() {
-                gl_FragColor = vec4(1, 0, 0, 1);
-            }`,
-
-            vert: `
-            precision mediump float;
-            uniform mat4 projection, view;
-            attribute vec3 position;
-            void main () {
-                gl_Position = projection * view * vec4(position, 1.0);
-            }`,
-
+        const drawPoints = regl({
+            vert: pointVert,
+            frag: pointFrag,
             attributes: {
                 position: [[0, -1, 0], [-1, 0, 0], [1, 1, 0]]
             },
-
-            count: 3
+            count: 3,
+            primitive: 'points'
         })
 
         regl.frame(() => {
             camera.update((state: any) => {
                 if (!camera.isDirty()) return
-                console.log(state, camera)
                 regl.clear({color: [0, 0, 0, 1]})
-                drawTriangle()
+                drawPoints()
             }, undefined)
         })
 
diff --git a/src/mol-gl/camera.ts b/src/mol-gl/camera.ts
index 0785b4e15..c2965e48c 100644
--- a/src/mol-gl/camera.ts
+++ b/src/mol-gl/camera.ts
@@ -177,9 +177,6 @@ export namespace Camera {
         function update (props: any, block: any) {
             setState()
             injectContext(props, block)
-            if (dirty) {
-                console.log(view)
-            }
             dirty = false
         }
 
diff --git a/src/mol-gl/shader/point.frag b/src/mol-gl/shader/point.frag
new file mode 100644
index 000000000..294326afa
--- /dev/null
+++ b/src/mol-gl/shader/point.frag
@@ -0,0 +1,3 @@
+void main(){
+    gl_FragColor = vec4(1, 0, 0, 1);
+}
\ No newline at end of file
diff --git a/src/mol-gl/shader/point.vert b/src/mol-gl/shader/point.vert
new file mode 100644
index 000000000..3e3b673b5
--- /dev/null
+++ b/src/mol-gl/shader/point.vert
@@ -0,0 +1,10 @@
+precision mediump float;
+uniform mat4 projection, view;
+attribute vec3 position;
+
+varying vec3 vPosition;
+
+void main(){
+    gl_PointSize = 20.0;
+    gl_Position = projection * view * vec4(position, 1.0);
+}
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
index f8761db56..8c7f44386 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -14,13 +14,14 @@
         "outDir": "build/node_modules",
         "baseUrl": "src",
         "paths": {
-            "mol-task": ["./mol-task", "./mol-task/index.ts"],
-            "mol-comp": ["./mol-comp", "./mol-comp/index.ts"],
-            "mol-util": ["./mol-util", "./mol-util/index.ts"],
             "mol-data": ["./mol-data", "./mol-data/index.ts"],
-            "mol-math": ["./mol-math"],
+            "mol-gl": ["./mol-gl"],
             "mol-io": ["./mol-io"],
-            "mol-model": ["./mol-model"]
+            "mol-math": ["./mol-math"],
+            "mol-model": ["./mol-model"],
+            "mol-ql": ["./mol-ql"],
+            "mol-task": ["./mol-task", "./mol-task/index.ts"],
+            "mol-util": ["./mol-util", "./mol-util/index.ts"],
         }
     },
     "include": [ "**/*" ]
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 000000000..a6c2bea5f
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,14 @@
+module.exports = {
+    module: {
+        rules: [
+            {
+                test: /\.(glsl|frag|vert)$/,
+                loader: 'raw-loader',
+            },
+            {
+                test: /\.(glsl|frag|vert)$/,
+                loader: 'glslify-loader',
+            }
+        ]
+    }
+}
\ No newline at end of file
-- 
GitLab