From 3a68f977ac85be392e515a7da1be1b61353e7a4a Mon Sep 17 00:00:00 2001 From: Alexander Rose <alex.rose@rcsb.org> Date: Thu, 10 Jan 2019 17:08:46 -0800 Subject: [PATCH] shader refactoring: size assignment, matrix-scale, transpose --- src/mol-gl/shader/chunks/assign-size.glsl | 11 +++++++ src/mol-gl/shader/chunks/common.glsl | 32 ++++++++++++++++++- .../shader/chunks/size-vert-params.glsl | 8 +++++ src/mol-gl/shader/mesh.vert | 1 - src/mol-gl/shader/points.vert | 24 ++------------ src/mol-gl/shader/utils/matrix-scale.glsl | 12 +++++++ src/mol-gl/shader/utils/transpose.glsl | 26 --------------- 7 files changed, 64 insertions(+), 50 deletions(-) create mode 100644 src/mol-gl/shader/chunks/assign-size.glsl create mode 100644 src/mol-gl/shader/chunks/size-vert-params.glsl create mode 100644 src/mol-gl/shader/utils/matrix-scale.glsl delete mode 100644 src/mol-gl/shader/utils/transpose.glsl 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 000000000..e40ee951b --- /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 cea7b801c..df1d23ec5 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 000000000..763815b67 --- /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 b3f1a9430..02a93045c 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 5340044c2..2504f1733 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 000000000..ee47bab5b --- /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 5a2a3b714..000000000 --- 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 -- GitLab