diff --git a/src/mol-gl/shader/chunks/assign-size.glsl b/src/mol-gl/shader/chunks/assign-size.glsl new file mode 100644 index 0000000000000000000000000000000000000000..e40ee951b73b880027b85cbcf379658f679912bb --- /dev/null +++ b/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 \ No newline at end of file diff --git a/src/mol-gl/shader/chunks/common.glsl b/src/mol-gl/shader/chunks/common.glsl index cea7b801c7dbecfd57c393de02fed6023156ffbb..df1d23ec50a5030754fe5b0c4bff967ec800ad43 100644 --- a/src/mol-gl/shader/chunks/common.glsl +++ b/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)); } \ No newline at end of file +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 \ No newline at end of file diff --git a/src/mol-gl/shader/chunks/size-vert-params.glsl b/src/mol-gl/shader/chunks/size-vert-params.glsl new file mode 100644 index 0000000000000000000000000000000000000000..763815b671a32fc5ce457d6185708fe694a82243 --- /dev/null +++ b/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 \ No newline at end of file diff --git a/src/mol-gl/shader/mesh.vert b/src/mol-gl/shader/mesh.vert index b3f1a943085fda68654f05d072db68d6bc803577..02a93045cc5a38b0f0b952f893233c0f28d4d755 100644 --- a/src/mol-gl/shader/mesh.vert +++ b/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') diff --git a/src/mol-gl/shader/points.vert b/src/mol-gl/shader/points.vert index 5340044c2adb4d2545c15e6d67ff506da6f58543..2504f1733fcad10f9d2c37e82bd0154dbac4afc7 100644 --- a/src/mol-gl/shader/points.vert +++ b/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; diff --git a/src/mol-gl/shader/utils/matrix-scale.glsl b/src/mol-gl/shader/utils/matrix-scale.glsl new file mode 100644 index 0000000000000000000000000000000000000000..ee47bab5bffcb2488cb8a4617c8f61252f86d632 --- /dev/null +++ b/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) \ No newline at end of file diff --git a/src/mol-gl/shader/utils/transpose.glsl b/src/mol-gl/shader/utils/transpose.glsl deleted file mode 100644 index 5a2a3b7147791d8752f04e92288a8047f0323898..0000000000000000000000000000000000000000 --- a/src/mol-gl/shader/utils/transpose.glsl +++ /dev/null @@ -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) \ No newline at end of file