diff --git a/src/mol-gl/shader/chunks/apply-marker-color.glsl b/src/mol-gl/shader/chunks/apply-marker-color.glsl index cc65b55255af0f62e342933641ebf6ab60c05e84..daa93f04d774627a3d84c98b0c9e8d0de371d440 100644 --- a/src/mol-gl/shader/chunks/apply-marker-color.glsl +++ b/src/mol-gl/shader/chunks/apply-marker-color.glsl @@ -2,7 +2,7 @@ if (uAlpha >= uPickingAlphaThreshold) { float marker = vMarker * 255.0; if (marker > 0.1) { - if (mod(marker, 2.0) > 0.1) { + if (intMod(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/chunks/common-frag-params.glsl b/src/mol-gl/shader/chunks/common-frag-params.glsl index dc62dbe9bec92fae2018665d136b5f10e624f71b..9048de9fd32056f16cbd386f9683cccf9e09ac46 100644 --- a/src/mol-gl/shader/chunks/common-frag-params.glsl +++ b/src/mol-gl/shader/chunks/common-frag-params.glsl @@ -14,4 +14,6 @@ uniform vec3 uFogColor; uniform float uAlpha; uniform float uPickingAlphaThreshold; -uniform int uPickable; \ No newline at end of file +uniform int uPickable; + +#pragma glslify: import('./common.glsl') \ No newline at end of file diff --git a/src/mol-gl/shader/chunks/common-vert-params.glsl b/src/mol-gl/shader/chunks/common-vert-params.glsl index 5028d0abb23450b2c7126a1ed256a6ebfeff95d6..e2b15799cbbdc638f2796e680838ffdcd24a566f 100644 --- a/src/mol-gl/shader/chunks/common-vert-params.glsl +++ b/src/mol-gl/shader/chunks/common-vert-params.glsl @@ -10,4 +10,5 @@ varying float vMarker; varying vec3 vViewPosition; -#pragma glslify: readFromTexture = require(../utils/read-from-texture.glsl) \ No newline at end of file +#pragma glslify: import('./common.glsl') +#pragma glslify: readFromTexture = require('../utils/read-from-texture.glsl', intMod=intMod, intDiv=intDiv, foo=foo) // foo=foo is a workaround for a bug in glslify \ No newline at end of file diff --git a/src/mol-gl/shader/chunks/common.glsl b/src/mol-gl/shader/chunks/common.glsl new file mode 100644 index 0000000000000000000000000000000000000000..cea7b801c7dbecfd57c393de02fed6023156ffbb --- /dev/null +++ b/src/mol-gl/shader/chunks/common.glsl @@ -0,0 +1,2 @@ +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)); } \ No newline at end of file diff --git a/src/mol-gl/shader/direct-volume.frag b/src/mol-gl/shader/direct-volume.frag index d94f580286440e3c29ef0aaf57e391d8a289b5a7..47ccb7dd689daca83a62ebf63c36e2b8670f78f1 100644 --- a/src/mol-gl/shader/direct-volume.frag +++ b/src/mol-gl/shader/direct-volume.frag @@ -45,11 +45,12 @@ uniform int uPickable; uniform sampler2D tColor; #endif -#pragma glslify: readFromTexture = require(./utils/read-from-texture.glsl) +#pragma glslify: import('./chunks/common.glsl') +#pragma glslify: readFromTexture = require(./utils/read-from-texture.glsl, intMod=intMod, intDiv=intDiv, foo=foo) // foo=foo is a workaround for a bug in glslify #pragma glslify: encodeIdRGB = require(./utils/encode-id-rgb.glsl) #pragma glslify: decodeIdRGB = require(./utils/decode-id-rgb.glsl) -#pragma glslify: texture3dFrom2dNearest = require(./utils/texture3d-from-2d-nearest.glsl) -#pragma glslify: texture3dFrom2dLinear = require(./utils/texture3d-from-2d-linear.glsl) +#pragma glslify: texture3dFrom2dNearest = require(./utils/texture3d-from-2d-nearest.glsl, intMod=intMod, intDiv=intDiv, foo=foo) // foo=foo is a workaround for a bug in glslify +#pragma glslify: texture3dFrom2dLinear = require(./utils/texture3d-from-2d-linear.glsl, intMod=intMod, intDiv=intDiv, foo=foo) // foo=foo is a workaround for a bug in glslify // uniform vec3 uLightPosition; uniform vec3 uLightColor; diff --git a/src/mol-gl/shader/gaussian-density.frag b/src/mol-gl/shader/gaussian-density.frag index ce7bacf7acdf79d87af242c8d8e20379041f83dd..137c2189100d4c1ba4c070e189cc10de0f0a5dbe 100644 --- a/src/mol-gl/shader/gaussian-density.frag +++ b/src/mol-gl/shader/gaussian-density.frag @@ -21,8 +21,9 @@ varying float vRadius; varying float vGroup; #endif +#pragma glslify: import('./chunks/common.glsl') #pragma glslify: encodeIdRGB = require(./utils/encode-id-rgb.glsl) -#pragma glslify: texture3dFrom2dNearest = require(./utils/texture3d-from-2d-nearest.glsl) +#pragma glslify: texture3dFrom2dNearest = require(./utils/texture3d-from-2d-nearest.glsl, intMod=intMod, intDiv=intDiv, foo=foo) // foo=foo is a workaround for a bug in glslify uniform vec3 uBboxSize; uniform vec3 uBboxMin; diff --git a/src/mol-gl/shader/utils/encode-float-rgb.glsl b/src/mol-gl/shader/utils/encode-float-rgb.glsl index 1cecbf759e9efc95c259c9e2389c052b6a627c59..07183663150d825630e63e886432bb0d9f2993c1 100644 --- a/src/mol-gl/shader/utils/encode-float-rgb.glsl +++ b/src/mol-gl/shader/utils/encode-float-rgb.glsl @@ -4,8 +4,6 @@ * @author Alexander Rose <alexander.rose@weirdbyte.de> */ -// TODO use myMod and myDiv to fix issues with picking? - vec3 encodeFloatRGB(in float value) { value = clamp(value, 0.0, 16777216.0); vec3 c = vec3(0.0); diff --git a/src/mol-gl/shader/utils/read-from-texture.glsl b/src/mol-gl/shader/utils/read-from-texture.glsl index 7442b957dcd212f310fd8090102c618093f29a44..97843f8e2df610df67b6d19f463626351b144251 100644 --- a/src/mol-gl/shader/utils/read-from-texture.glsl +++ b/src/mol-gl/shader/utils/read-from-texture.glsl @@ -4,9 +4,6 @@ * @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 = intMod(i, dim.x); float y = floor(intDiv(i, dim.x)); 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 d0d4f928722704f05356bb122005853f55cac4b1..0a9ceffa8c8798ced39e5e1b68758f1ae0c39b96 100644 --- a/src/mol-gl/shader/utils/texture3d-from-2d-linear.glsl +++ b/src/mol-gl/shader/utils/texture3d-from-2d-linear.glsl @@ -5,9 +5,6 @@ * @author Michael Krone <michael.krone@uni-tuebingen.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 texture3dFrom2dLinear(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) { float zSlice0 = floor(pos.z * gridDim.z); float column0 = intMod(zSlice0 * gridDim.x, texDim.x) / gridDim.x; 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 8c4fb0882c831709358714535f7c24be8637e4a9..b9570eaef378a8d3be78ab8aebb4e7d0570f2d86 100644 --- a/src/mol-gl/shader/utils/texture3d-from-2d-nearest.glsl +++ b/src/mol-gl/shader/utils/texture3d-from-2d-nearest.glsl @@ -5,9 +5,6 @@ * @author Michael Krone <michael.krone@uni-tuebingen.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 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 = intMod(zSlice * gridDim.x, texDim.x) / gridDim.x;