Bladeren bron

shader refactoring: size assignment, matrix-scale, transpose

Alexander Rose 6 jaren geleden
bovenliggende
commit
3a68f977ac

+ 11 - 0
src/mol-gl/shader/chunks/assign-size.glsl

@@ -0,0 +1,11 @@
+#if defined(dSizeType_uniform)
+    float size = uSize;
+#elif defined(dSizeType_attribute)
+    float size = aSize;
+#elif defined(dSizeType_instance)
+    float size = readFromTexture(tSize, aInstance, uSizeTexDim).r;
+#elif defined(dSizeType_group)
+    float size = readFromTexture(tSize, aGroup, uSizeTexDim).r;
+#elif defined(dSizeType_groupInstance)
+    float size = readFromTexture(tSize, aInstance * float(uGroupCount) + aGroup, uSizeTexDim).r;
+#endif

+ 31 - 1
src/mol-gl/shader/chunks/common.glsl

@@ -1,2 +1,32 @@
 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)); }
+float intMod(float a, float b) { return a - b * float(int(a) / int(b)); }
+
+#if __VERSION__ != 300
+    float transpose(const in float m) {
+        return m;
+    }
+
+    mat2 transpose(const in mat2 m) {
+        return mat2(
+            m[0][0], m[1][0],
+            m[0][1], m[1][1]
+        );
+    }
+
+    mat3 transpose(const in mat3 m) {
+        return mat3(
+            m[0][0], m[1][0], m[2][0],
+            m[0][1], m[1][1], m[2][1],
+            m[0][2], m[1][2], m[2][2]
+        );
+    }
+
+    mat4 transpose(const in mat4 m) {
+        return mat4(
+            m[0][0], m[1][0], m[2][0], m[3][0],
+            m[0][1], m[1][1], m[2][1], m[3][1],
+            m[0][2], m[1][2], m[2][2], m[3][2],
+            m[0][3], m[1][3], m[2][3], m[3][3]
+        );
+    }
+#endif

+ 8 - 0
src/mol-gl/shader/chunks/size-vert-params.glsl

@@ -0,0 +1,8 @@
+#if defined(dSizeType_uniform)
+    uniform float uSize;
+#elif defined(dSizeType_attribute)
+    attribute float aSize;
+#elif defined(dSizeType_instance) || defined(dSizeType_group) || defined(dSizeType_groupInstance)
+    uniform vec2 uSizeTexDim;
+    uniform sampler2D tSize;
+#endif

+ 0 - 1
src/mol-gl/shader/mesh.vert

@@ -21,7 +21,6 @@ attribute float aGroup;
 #endif
 
 #pragma glslify: inverse = require(./utils/inverse.glsl)
-#pragma glslify: transpose = require(./utils/transpose.glsl)
 
 void main(){
     #pragma glslify: import('./chunks/assign-color-varying.glsl')

+ 2 - 22
src/mol-gl/shader/points.vert

@@ -9,20 +9,11 @@ precision highp int;
 
 #pragma glslify: import('./chunks/common-vert-params.glsl')
 #pragma glslify: import('./chunks/color-vert-params.glsl')
+#pragma glslify: import('./chunks/size-vert-params.glsl')
 
 uniform float uPixelRatio;
 uniform float uViewportHeight;
 
-#if defined(dSizeType_uniform)
-    uniform float uSize;
-#elif defined(dSizeType_attribute)
-    attribute float aSize;
-#elif defined(dSizeType_instance) || defined(dSizeType_group) || defined(dSizeType_groupInstance)
-    varying vec4 vSize;
-    uniform vec2 uSizeTexDim;
-    uniform sampler2D tSize;
-#endif
-
 attribute vec3 aPosition;
 attribute mat4 aTransform;
 attribute float aInstance;
@@ -31,18 +22,7 @@ attribute float aGroup;
 void main(){
     #pragma glslify: import('./chunks/assign-color-varying.glsl')
     #pragma glslify: import('./chunks/assign-position.glsl')
-
-    #if defined(dSizeType_uniform)
-        float size = uSize;
-    #elif defined(dSizeType_attribute)
-        float size = aSize;
-    #elif defined(dSizeType_instance)
-        float size = readFromTexture(tSize, aInstance, uSizeTexDim).r;
-    #elif defined(dSizeType_group)
-        float size = readFromTexture(tSize, aGroup, uSizeTexDim).r;
-    #elif defined(dSizeType_groupInstance)
-        float size = readFromTexture(tSize, aInstance * float(uGroupCount) + aGroup, uSizeTexDim).r;
-    #endif
+    #pragma glslify: import('./chunks/assign-size.glsl')
 
     #ifdef dPointSizeAttenuation
         gl_PointSize = size * uPixelRatio * ((uViewportHeight / 2.0) / -mvPosition.z) * 5.0;

+ 12 - 0
src/mol-gl/shader/utils/matrix-scale.glsl

@@ -0,0 +1,12 @@
+/**
+ * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ *
+ * @author Alexander Rose <alexander.rose@weirdbyte.de>
+ */
+
+float matrixScale(in mat4 m){
+    vec4 r = m[0];
+    return sqrt(r[0] * r[0] + r[1] * r[1] + r[2] * r[2]);
+}
+
+#pragma glslify: export(matrixScale)

+ 0 - 26
src/mol-gl/shader/utils/transpose.glsl

@@ -1,26 +0,0 @@
-// (c) 2014 Mikola Lysenko. MIT License
-// https://github.com/glslify/glsl-transpose
-
-float transpose(const in float m) {
-  return m;
-}
-
-mat2 transpose(const in mat2 m) {
-  return mat2(m[0][0], m[1][0],
-              m[0][1], m[1][1]);
-}
-
-mat3 transpose(const in mat3 m) {
-  return mat3(m[0][0], m[1][0], m[2][0],
-              m[0][1], m[1][1], m[2][1],
-              m[0][2], m[1][2], m[2][2]);
-}
-
-mat4 transpose(const in mat4 m) {
-  return mat4(m[0][0], m[1][0], m[2][0], m[3][0],
-              m[0][1], m[1][1], m[2][1], m[3][1],
-              m[0][2], m[1][2], m[2][2], m[3][2],
-              m[0][3], m[1][3], m[2][3], m[3][3]);
-}
-
-#pragma glslify: export(transpose)