From ade1e74cdffcbbc543ecf1f67c8c9d6f4314edcb Mon Sep 17 00:00:00 2001
From: Alexander Rose <alex.rose@rcsb.org>
Date: Fri, 11 Jan 2019 16:49:06 -0800
Subject: [PATCH] added sizeFactor to points, lines, spheres renderables

---
 src/mol-geo/geometry/lines/lines.ts           |  3 +++
 src/mol-geo/geometry/points/points.ts         |  3 +++
 src/mol-geo/geometry/spheres/spheres.ts       |  5 ++++
 src/mol-gl/_spec/renderer.spec.ts             |  1 +
 src/mol-gl/renderable/schema.ts               |  1 +
 src/mol-gl/shader/chunks/assign-size.glsl     |  4 ++-
 .../shader/chunks/size-vert-params.glsl       |  4 ++-
 src/mol-gl/shader/lines.vert                  | 26 +++----------------
 8 files changed, 22 insertions(+), 25 deletions(-)

diff --git a/src/mol-geo/geometry/lines/lines.ts b/src/mol-geo/geometry/lines/lines.ts
index 3648e8490..2ba76bd83 100644
--- a/src/mol-geo/geometry/lines/lines.ts
+++ b/src/mol-geo/geometry/lines/lines.ts
@@ -94,6 +94,7 @@ export namespace Lines {
 
     export const Params = {
         ...Geometry.Params,
+        sizeFactor: PD.Numeric(1, { min: 0, max: 10, step: 0.1 }),
         lineSizeAttenuation: PD.Boolean(false),
     }
     export type Params = typeof Params
@@ -123,6 +124,7 @@ export namespace Lines {
             ...transform,
 
             ...Geometry.createValues(props, counts),
+            uSizeFactor: ValueCell.create(props.sizeFactor),
             dLineSizeAttenuation: ValueCell.create(props.lineSizeAttenuation),
             dDoubleSided: ValueCell.create(true),
             dFlipSided: ValueCell.create(false),
@@ -131,6 +133,7 @@ export namespace Lines {
 
     export function updateValues(values: LinesValues, props: PD.Values<Params>) {
         Geometry.updateValues(values, props)
+        ValueCell.updateIfChanged(values.uSizeFactor, props.sizeFactor)
         ValueCell.updateIfChanged(values.dLineSizeAttenuation, props.lineSizeAttenuation)
     }
 
diff --git a/src/mol-geo/geometry/points/points.ts b/src/mol-geo/geometry/points/points.ts
index c25d51fba..d4cdc6226 100644
--- a/src/mol-geo/geometry/points/points.ts
+++ b/src/mol-geo/geometry/points/points.ts
@@ -57,6 +57,7 @@ export namespace Points {
 
     export const Params = {
         ...Geometry.Params,
+        sizeFactor: PD.Numeric(1, { min: 0, max: 10, step: 0.1 }),
         pointSizeAttenuation: PD.Boolean(false),
         pointFilledCircle: PD.Boolean(false),
         pointEdgeBleach: PD.Numeric(0.2, { min: 0, max: 1, step: 0.05 }),
@@ -87,6 +88,7 @@ export namespace Points {
             ...transform,
 
             ...Geometry.createValues(props, counts),
+            uSizeFactor: ValueCell.create(props.sizeFactor),
             dPointSizeAttenuation: ValueCell.create(props.pointSizeAttenuation),
             dPointFilledCircle: ValueCell.create(props.pointFilledCircle),
             uPointEdgeBleach: ValueCell.create(props.pointEdgeBleach),
@@ -95,6 +97,7 @@ export namespace Points {
 
     export function updateValues(values: PointsValues, props: PD.Values<Params>) {
         Geometry.updateValues(values, props)
+        ValueCell.updateIfChanged(values.uSizeFactor, props.sizeFactor)
         ValueCell.updateIfChanged(values.dPointSizeAttenuation, props.pointSizeAttenuation)
         ValueCell.updateIfChanged(values.dPointFilledCircle, props.pointFilledCircle)
         ValueCell.updateIfChanged(values.uPointEdgeBleach, props.pointEdgeBleach)
diff --git a/src/mol-geo/geometry/spheres/spheres.ts b/src/mol-geo/geometry/spheres/spheres.ts
index 270409f22..a460d7639 100644
--- a/src/mol-geo/geometry/spheres/spheres.ts
+++ b/src/mol-geo/geometry/spheres/spheres.ts
@@ -53,6 +53,7 @@ export namespace Spheres {
 
     export const Params = {
         ...Geometry.Params,
+        sizeFactor: PD.Numeric(1, { min: 0, max: 10, step: 0.1 }),
         doubleSided: PD.Boolean(false),
     }
     export type Params = typeof Params
@@ -90,6 +91,7 @@ export namespace Spheres {
             padding: ValueCell.create(padding),
 
             ...Geometry.createValues(props, counts),
+            uSizeFactor: ValueCell.create(props.sizeFactor),
             dDoubleSided: ValueCell.create(props.doubleSided),
         }
     }
@@ -125,12 +127,15 @@ export namespace Spheres {
             padding: ValueCell.create(sizeValue),
 
             ...Geometry.createValues(p, counts),
+            uSizeFactor: ValueCell.create(p.sizeFactor),
             dDoubleSided: ValueCell.create(p.doubleSided),
         }
     }
 
     export function updateValues(values: SpheresValues, props: PD.Values<Params>) {
         Geometry.updateValues(values, props)
+        ValueCell.updateIfChanged(values.uSizeFactor, props.sizeFactor)
+        ValueCell.updateIfChanged(values.dDoubleSided, props.doubleSided)
     }
 
     export function updateBoundingSphere(values: SpheresValues, spheres: Spheres) {
diff --git a/src/mol-gl/_spec/renderer.spec.ts b/src/mol-gl/_spec/renderer.spec.ts
index 1f580b199..0b74164e7 100644
--- a/src/mol-gl/_spec/renderer.spec.ts
+++ b/src/mol-gl/_spec/renderer.spec.ts
@@ -82,6 +82,7 @@ function createPoints() {
         boundingSphere,
         invariantBoundingSphere,
 
+        uSizeFactor: ValueCell.create(1),
         dPointSizeAttenuation: ValueCell.create(true),
         dPointFilledCircle: ValueCell.create(false),
         uPointEdgeBleach: ValueCell.create(0.5),
diff --git a/src/mol-gl/renderable/schema.ts b/src/mol-gl/renderable/schema.ts
index 195aad5a6..bf9533943 100644
--- a/src/mol-gl/renderable/schema.ts
+++ b/src/mol-gl/renderable/schema.ts
@@ -180,6 +180,7 @@ export const SizeSchema = {
     uSizeTexDim: UniformSpec('v2'),
     tSize: TextureSpec('image-uint8', 'alpha', 'ubyte', 'nearest'),
     dSizeType: DefineSpec('string', ['uniform', 'attribute', 'instance', 'group', 'group_instance']),
+    uSizeFactor: UniformSpec('f'),
 }
 export type SizeSchema = typeof SizeSchema
 export type SizeValues = Values<SizeSchema>
diff --git a/src/mol-gl/shader/chunks/assign-size.glsl b/src/mol-gl/shader/chunks/assign-size.glsl
index 20a66c9fd..be66b9bff 100644
--- a/src/mol-gl/shader/chunks/assign-size.glsl
+++ b/src/mol-gl/shader/chunks/assign-size.glsl
@@ -12,4 +12,6 @@
 
 #if defined(dSizeType_instance) || defined(dSizeType_group) || defined(dSizeType_groupInstance)
     size = decodeFloatLog(size);
-#endif
\ No newline at end of file
+#endif
+
+size *= uSizeFactor;
\ 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
index 8ccf85e69..ed65c46c3 100644
--- a/src/mol-gl/shader/chunks/size-vert-params.glsl
+++ b/src/mol-gl/shader/chunks/size-vert-params.glsl
@@ -6,4 +6,6 @@
     uniform vec2 uSizeTexDim;
     uniform sampler2D tSize;
     #pragma glslify: decodeFloatLog = require(../utils/decode-float-log.glsl)
-#endif
\ No newline at end of file
+#endif
+
+uniform float uSizeFactor;
\ No newline at end of file
diff --git a/src/mol-gl/shader/lines.vert b/src/mol-gl/shader/lines.vert
index 854f10316..91f0ca8d6 100644
--- a/src/mol-gl/shader/lines.vert
+++ b/src/mol-gl/shader/lines.vert
@@ -11,20 +11,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;
@@ -46,19 +37,8 @@ void trimSegment(const in vec4 start, inout vec4 end) {
 
 void main(){
     #pragma glslify: import('./chunks/assign-color-varying.glsl')
-
-    // TODO move to chunk (also in point.vert)
-    #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-marker-varying.glsl')
+    #pragma glslify: import('./chunks/assign-size.glsl')
 
     mat4 modelView = uView * uModel * aTransform;
 
-- 
GitLab