From 4f7d6bdc82bdd5fdffd10722199294b27d969d33 Mon Sep 17 00:00:00 2001
From: Alexander Rose <alex.rose@rcsb.org>
Date: Mon, 22 Oct 2018 12:08:32 -0700
Subject: [PATCH] fixed marker color, fixed read-from-texture

---
 src/mol-gl/shader/chunks/apply-marker-color.glsl    |  4 ++--
 src/mol-gl/shader/utils/read-from-texture.glsl      |  7 +++++--
 .../shader/utils/texture3d-from-2d-linear.glsl      | 13 ++++++-------
 .../shader/utils/texture3d-from-2d-nearest.glsl     |  9 ++++-----
 4 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/src/mol-gl/shader/chunks/apply-marker-color.glsl b/src/mol-gl/shader/chunks/apply-marker-color.glsl
index 0c73020b0..14741ac16 100644
--- a/src/mol-gl/shader/chunks/apply-marker-color.glsl
+++ b/src/mol-gl/shader/chunks/apply-marker-color.glsl
@@ -1,6 +1,6 @@
-float marker = vMarker * 256.0;
+float marker = vMarker * 255.0;
 if (marker > 0.1) {
-    if (mod(marker, 2.0) < 0.1) {
+    if (mod(marker, 2.0) > 0.1) {
         gl_FragColor.rgb = mix(uHighlightColor, gl_FragColor.rgb, 0.3);
     } else {
         gl_FragColor.rgb = mix(uSelectColor, gl_FragColor.rgb, 0.3);
diff --git a/src/mol-gl/shader/utils/read-from-texture.glsl b/src/mol-gl/shader/utils/read-from-texture.glsl
index a43c9d528..7442b957d 100644
--- a/src/mol-gl/shader/utils/read-from-texture.glsl
+++ b/src/mol-gl/shader/utils/read-from-texture.glsl
@@ -4,9 +4,12 @@
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
  */
 
+float intDiv(float a, float b) { return float(int(a) / int(b)); }
+float intMod(float a, float b) { return a - b * float(int(a) / int(b)); }
+
 vec4 readFromTexture (const in sampler2D tex, const in float i, const in vec2 dim) {
-    float x = mod(i, dim.x);
-    float y = floor(i / dim.x);
+    float x = intMod(i, dim.x);
+    float y = floor(intDiv(i, dim.x));
     vec2 uv = (vec2(x, y) + 0.5) / dim;
     return texture2D(tex, uv);
 }
diff --git a/src/mol-gl/shader/utils/texture3d-from-2d-linear.glsl b/src/mol-gl/shader/utils/texture3d-from-2d-linear.glsl
index af7893849..d0d4f9287 100644
--- a/src/mol-gl/shader/utils/texture3d-from-2d-linear.glsl
+++ b/src/mol-gl/shader/utils/texture3d-from-2d-linear.glsl
@@ -5,20 +5,19 @@
  * @author Michael Krone <michael.krone@uni-tuebingen.de>
  */
 
-// TODO workaround due to some kind of GPU quirk
-float myMod(float a, float b) { return a - b * float(int(a) / int(b)); }
-float myDiv(float a, float b) { return float(int(a) / int(b)); }
+float intDiv(float a, float b) { return float(int(a) / int(b)); }
+float intMod(float a, float b) { return a - b * float(int(a) / int(b)); }
 
 vec4 texture3dFrom2dLinear(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
     float zSlice0 = floor(pos.z * gridDim.z);
-    float column0 = myMod(zSlice0 * gridDim.x, texDim.x) / gridDim.x;
-    float row0 = floor(myDiv(zSlice0 * gridDim.x, texDim.x));
+    float column0 = intMod(zSlice0 * gridDim.x, texDim.x) / gridDim.x;
+    float row0 = floor(intDiv(zSlice0 * gridDim.x, texDim.x));
     vec2 coord0 = (vec2(column0 * gridDim.x, row0 * gridDim.y) + (pos.xy * gridDim.xy)) / texDim;
     vec4 color0 = texture2D(tex, coord0);
 
     float zSlice1 = zSlice0 + 1.0;
-    float column1 = myMod(zSlice1 * gridDim.x, texDim.x) / gridDim.x;
-    float row1 = floor(myDiv(zSlice1 * gridDim.x, texDim.x));
+    float column1 = intMod(zSlice1 * gridDim.x, texDim.x) / gridDim.x;
+    float row1 = floor(intDiv(zSlice1 * gridDim.x, texDim.x));
     vec2 coord1 = (vec2(column1 * gridDim.x, row1 * gridDim.y) + (pos.xy * gridDim.xy)) / texDim;
     vec4 color1 = texture2D(tex, coord1);
 
diff --git a/src/mol-gl/shader/utils/texture3d-from-2d-nearest.glsl b/src/mol-gl/shader/utils/texture3d-from-2d-nearest.glsl
index 305312cd1..8c4fb0882 100644
--- a/src/mol-gl/shader/utils/texture3d-from-2d-nearest.glsl
+++ b/src/mol-gl/shader/utils/texture3d-from-2d-nearest.glsl
@@ -5,14 +5,13 @@
  * @author Michael Krone <michael.krone@uni-tuebingen.de>
  */
 
-// TODO workaround due to some kind of GPU quirk
-float myMod(float a, float b) { return a - b * float(int(a) / int(b)); }
-float myDiv(float a, float b) { return float(int(a) / int(b)); }
+float intDiv(float a, float b) { return float(int(a) / int(b)); }
+float intMod(float a, float b) { return a - b * float(int(a) / int(b)); }
 
 vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
     float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice
-    float column = myMod(zSlice * gridDim.x, texDim.x) / gridDim.x;
-    float row = floor(myDiv(zSlice * gridDim.x, texDim.x));
+    float column = intMod(zSlice * gridDim.x, texDim.x) / gridDim.x;
+    float row = floor(intDiv(zSlice * gridDim.x, texDim.x));
     vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / texDim;
     return texture2D(tex, coord);
 }
-- 
GitLab