From 4bc7e044a37135c8d4951dd1e0d94e04ed57a304 Mon Sep 17 00:00:00 2001 From: Alexander Rose <alex.rose@rcsb.org> Date: Tue, 20 Nov 2018 10:30:45 -0800 Subject: [PATCH] refactored intMod/intDiv shader code --- src/mol-gl/shader/chunks/apply-marker-color.glsl | 2 +- src/mol-gl/shader/chunks/common-frag-params.glsl | 4 +++- src/mol-gl/shader/chunks/common-vert-params.glsl | 3 ++- src/mol-gl/shader/chunks/common.glsl | 2 ++ src/mol-gl/shader/direct-volume.frag | 7 ++++--- src/mol-gl/shader/gaussian-density.frag | 3 ++- src/mol-gl/shader/utils/encode-float-rgb.glsl | 2 -- src/mol-gl/shader/utils/read-from-texture.glsl | 3 --- src/mol-gl/shader/utils/texture3d-from-2d-linear.glsl | 3 --- src/mol-gl/shader/utils/texture3d-from-2d-nearest.glsl | 3 --- 10 files changed, 14 insertions(+), 18 deletions(-) create mode 100644 src/mol-gl/shader/chunks/common.glsl diff --git a/src/mol-gl/shader/chunks/apply-marker-color.glsl b/src/mol-gl/shader/chunks/apply-marker-color.glsl index cc65b5525..daa93f04d 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 dc62dbe9b..9048de9fd 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 5028d0abb..e2b15799c 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 000000000..cea7b801c --- /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 d94f58028..47ccb7dd6 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 ce7bacf7a..137c21891 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 1cecbf759..071836631 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 7442b957d..97843f8e2 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 d0d4f9287..0a9ceffa8 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 8c4fb0882..b9570eaef 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; -- GitLab