Bladeren bron

refactored intMod/intDiv shader code

Alexander Rose 6 jaren geleden
bovenliggende
commit
4bc7e044a3

+ 1 - 1
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);

+ 3 - 1
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;
+uniform int uPickable;
+
+#pragma glslify: import('./common.glsl')

+ 2 - 1
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)
+#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

+ 2 - 0
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)); }

+ 4 - 3
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;

+ 2 - 1
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;

+ 0 - 2
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);

+ 0 - 3
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));

+ 0 - 3
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;

+ 0 - 3
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;