Alexander Rose 3 years ago
parent
commit
79cd833ae6
1 changed files with 21 additions and 33 deletions
  1. 21 33
      src/mol-gl/shader/marching-cubes/isosurface.frag.ts

+ 21 - 33
src/mol-gl/shader/marching-cubes/isosurface.frag.ts

@@ -86,6 +86,25 @@ vec4 baseVoxel(vec2 pos) {
     return texture2D(tActiveVoxelsBase, pos / uSize);
 }
 
+vec4 getGroup(const in vec3 p) {
+    vec3 gridDim = uGridDim - vec3(1.0, 1.0, 0.0); // remove xy padding
+    // note that we swap x and z because the texture is flipped around y
+    #if defined(dAxisOrder_012)
+        float group = p.z + p.y * gridDim.z + p.x * gridDim.z * gridDim.y; // 210
+    #elif defined(dAxisOrder_021)
+        float group = p.y + p.z * gridDim.y + p.x * gridDim.y * gridDim.z; // 120
+    #elif defined(dAxisOrder_102)
+        float group = p.z + p.x * gridDim.z + p.y * gridDim.z * gridDim.x; // 201
+    #elif defined(dAxisOrder_120)
+        float group = p.x + p.z * gridDim.x + p.y * gridDim.x * gridDim.z; // 021
+    #elif defined(dAxisOrder_201)
+        float group = p.y + p.x * gridDim.y + p.z * gridDim.y * gridDim.x; // 102
+    #elif defined(dAxisOrder_210)
+        float group = p.x + p.y * gridDim.x + p.z * gridDim.x * gridDim.y; // 012
+    #endif
+    return vec4(group > 16777215.5 ? vec3(1.0) : encodeFloatRGB(group), 1.0);
+}
+
 void main(void) {
     // get 1D index
     int vI = int(gl_FragCoord.x) + int(gl_FragCoord.y) * int(uSize);
@@ -255,44 +274,13 @@ void main(void) {
         #ifdef dPackedGroup
             gl_FragData[1] = vec4(voxel(coord3d).rgb, 1.0);
         #else
-            vec3 gridDim = uGridDim - vec3(1.0, 1.0, 0.0); // remove xy padding
-            // note that we swap x and z because the texture is flipped around y
-            #if defined(dAxisOrder_012)
-                float group = coord3d.z + coord3d.y * gridDim.z + coord3d.x * gridDim.z * gridDim.y; // 210
-            #elif defined(dAxisOrder_021)
-                float group = coord3d.y + coord3d.z * gridDim.y + coord3d.x * gridDim.y * gridDim.z; // 120
-            #elif defined(dAxisOrder_102)
-                float group = coord3d.z + coord3d.x * gridDim.z + coord3d.y * gridDim.z * gridDim.x; // 201
-            #elif defined(dAxisOrder_120)
-                float group = coord3d.x + coord3d.z * gridDim.x + coord3d.y * gridDim.x * gridDim.z; // 021
-            #elif defined(dAxisOrder_201)
-                float group = coord3d.y + coord3d.x * gridDim.y + coord3d.z * gridDim.y * gridDim.x; // 102
-            #elif defined(dAxisOrder_210)
-                float group = coord3d.x + coord3d.y * gridDim.x + coord3d.z * gridDim.x * gridDim.y; // 012
-            #endif
-            gl_FragData[1] = vec4(group > 16777215.5 ? vec3(1.0) : encodeFloatRGB(group), 1.0);
+            gl_FragData[1] = getGroup(coord3d);
         #endif
     #else
         #ifdef dPackedGroup
             gl_FragData[1] = vec4(t < 0.5 ? d0.rgb : d1.rgb, 1.0);
         #else
-            vec3 b = t < 0.5 ? b0 : b1;
-            vec3 gridDim = uGridDim - vec3(1.0, 1.0, 0.0); // remove xy padding
-            // note that we swap x and z because the texture is flipped around y
-            #if defined(dAxisOrder_012)
-                float group = b.z + b.y * gridDim.z + b.x * gridDim.z * gridDim.y; // 210
-            #elif defined(dAxisOrder_021)
-                float group = b.y + b.z * gridDim.y + b.x * gridDim.y * gridDim.z; // 120
-            #elif defined(dAxisOrder_102)
-                float group = b.z + b.x * gridDim.z + b.y * gridDim.z * gridDim.x; // 201
-            #elif defined(dAxisOrder_120)
-                float group = b.x + b.z * gridDim.x + b.y * gridDim.x * gridDim.z; // 021
-            #elif defined(dAxisOrder_201)
-                float group = b.y + b.x * gridDim.y + b.z * gridDim.y * gridDim.x; // 102
-            #elif defined(dAxisOrder_210)
-                float group = b.x + b.y * gridDim.x + b.z * gridDim.x * gridDim.y; // 012
-            #endif
-            gl_FragData[1] = vec4(group > 16777215.5 ? vec3(1.0) : encodeFloatRGB(group), 1.0);
+            gl_FragData[1] = getGroup(t < 0.5 ? b0 : b1);
         #endif
     #endif