diff --git a/src/mol-gl/shader/chunks/apply-marker-color.glsl b/src/mol-gl/shader/chunks/apply-marker-color.glsl index 0c73020b06f145938655deeb00b56b625792f1be..14741ac1666722e7f79143945a24049ffa1db11b 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 a43c9d528af35cd1a2be41dfb2d18d3b2c240bf1..7442b957dcd212f310fd8090102c618093f29a44 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 af7893849ff3a65eacf95addc35b50f9432e710e..d0d4f928722704f05356bb122005853f55cac4b1 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 305312cd17a044cc2a71e36affddf8e8b02edfc2..8c4fb0882c831709358714535f7c24be8637e4a9 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); }