From e400773a6cec0223ec1d8afd7120f389a7e048e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Flatval?= Date: Thu, 11 Jul 2024 11:07:12 +0200 Subject: [PATCH] refactor: simplify isClipped --- .../rendering/src/glsl/base/isClipped.glsl | 2 +- .../src/glsl/pointcloud/pointcloud.vert | 26 +------------------ .../src/glsl/sector/instancedMesh.frag | 2 +- .../rendering/src/glsl/sector/mesh.frag | 2 +- .../src/glsl/sector/primitives/circle.frag | 2 +- .../src/glsl/sector/primitives/cone.frag | 4 +-- .../glsl/sector/primitives/eccentricCone.frag | 4 +-- .../sector/primitives/ellipsoidSegment.frag | 4 +-- .../sector/primitives/generalCylinder.frag | 4 +-- .../glsl/sector/primitives/generalring.frag | 2 +- .../glsl/sector/primitives/torusSegment.frag | 2 +- .../src/glsl/sector/primitives/trapezium.frag | 2 +- 12 files changed, 16 insertions(+), 40 deletions(-) diff --git a/viewer/packages/rendering/src/glsl/base/isClipped.glsl b/viewer/packages/rendering/src/glsl/base/isClipped.glsl index 3a028e12eb2..3bfbbe768cd 100644 --- a/viewer/packages/rendering/src/glsl/base/isClipped.glsl +++ b/viewer/packages/rendering/src/glsl/base/isClipped.glsl @@ -2,7 +2,7 @@ uniform vec4 clippingPlanes[NUM_CLIPPING_PLANES]; #endif -bool isClipped(NodeAppearance nodeAppearance, vec3 point) { +bool isClipped(vec3 point) { #if NUM_CLIPPING_PLANES > 0 vec3 pointFlipped = -point; vec4 plane; diff --git a/viewer/packages/rendering/src/glsl/pointcloud/pointcloud.vert b/viewer/packages/rendering/src/glsl/pointcloud/pointcloud.vert index 4b4d397dfe5..e2a8cb32baf 100644 --- a/viewer/packages/rendering/src/glsl/pointcloud/pointcloud.vert +++ b/viewer/packages/rendering/src/glsl/pointcloud/pointcloud.vert @@ -2,6 +2,7 @@ precision highp float; precision highp int; #pragma glslify: import('../base/pointSizeRelativeToScreen.glsl'); +#pragma glslify: import('../base/isClipped.glsl'); #define max_clip_boxes 30 @@ -45,31 +46,6 @@ uniform sampler2D gradient; uniform sampler2D classificationLUT; uniform sampler2D objectIdLUT; -#if NUM_CLIPPING_PLANES > 0 -uniform vec4 clippingPlanes[NUM_CLIPPING_PLANES]; -#endif - -bool isClipped(vec3 point) { -#if NUM_CLIPPING_PLANES > 0 - vec3 pointFlipped = -point; - vec4 plane; - - for (int i = 0; i < UNION_CLIPPING_PLANES; i++) { - plane = clippingPlanes[i]; - if (dot(pointFlipped, plane.xyz) > plane.w) return true; - } -#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES - bool clipped = true; - for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - clipped = (dot(pointFlipped, plane.xyz) > plane.w) && clipped; - } - if ( clipped ) return true; -#endif -#endif - return false; -} - out vec3 vColor; #if defined(weighted_splats) diff --git a/viewer/packages/rendering/src/glsl/sector/instancedMesh.frag b/viewer/packages/rendering/src/glsl/sector/instancedMesh.frag index f9e81bf1477..0935f2fa6c4 100644 --- a/viewer/packages/rendering/src/glsl/sector/instancedMesh.frag +++ b/viewer/packages/rendering/src/glsl/sector/instancedMesh.frag @@ -21,7 +21,7 @@ void main() { highp float treeIndex = unpackTreeIndex(v_treeIndexPacked); NodeAppearance appearance = nodeAppearanceFromTexel(v_nodeAppearanceTexel); - if (isClipped(appearance, v_viewPosition)) { + if (isClipped(v_viewPosition)) { discard; } diff --git a/viewer/packages/rendering/src/glsl/sector/mesh.frag b/viewer/packages/rendering/src/glsl/sector/mesh.frag index 22f8d018c09..428ee2212b9 100644 --- a/viewer/packages/rendering/src/glsl/sector/mesh.frag +++ b/viewer/packages/rendering/src/glsl/sector/mesh.frag @@ -32,7 +32,7 @@ void main() { highp float v_treeIndex = unpackTreeIndex(v_treeIndexPacked); NodeAppearance appearance = nodeAppearanceFromTexel(v_nodeAppearanceTexel); - if (isClipped(appearance, v_viewPosition)) { + if (isClipped(v_viewPosition)) { discard; } diff --git a/viewer/packages/rendering/src/glsl/sector/primitives/circle.frag b/viewer/packages/rendering/src/glsl/sector/primitives/circle.frag index a1ada2db98d..e059411a1f3 100644 --- a/viewer/packages/rendering/src/glsl/sector/primitives/circle.frag +++ b/viewer/packages/rendering/src/glsl/sector/primitives/circle.frag @@ -27,7 +27,7 @@ void main() discard; NodeAppearance appearance = nodeAppearanceFromTexel(v_nodeAppearanceTexel); - if (isClipped(appearance, vViewPosition)) { + if (isClipped(vViewPosition)) { discard; } diff --git a/viewer/packages/rendering/src/glsl/sector/primitives/cone.frag b/viewer/packages/rendering/src/glsl/sector/primitives/cone.frag index 962b3afbc28..dcb79675066 100644 --- a/viewer/packages/rendering/src/glsl/sector/primitives/cone.frag +++ b/viewer/packages/rendering/src/glsl/sector/primitives/cone.frag @@ -108,7 +108,7 @@ void main() if (intersectionPoint.z <= 0.0 || intersectionPoint.z > height || theta > v_angle + v_arcAngle || - isClipped(appearance, p) || + isClipped(p) || rayTargetDist + dist < 0.0 ) { // Missed the first point, check the other point @@ -124,7 +124,7 @@ void main() if (intersectionPoint.z <= 0.0 || intersectionPoint.z > height || theta > v_angle + v_arcAngle || - isClipped(appearance, p) || + isClipped(p) || rayTargetDist + dist < 0.0 ) { // Missed the other point too diff --git a/viewer/packages/rendering/src/glsl/sector/primitives/eccentricCone.frag b/viewer/packages/rendering/src/glsl/sector/primitives/eccentricCone.frag index 6c1f504fc68..4d2d4f1c43b 100644 --- a/viewer/packages/rendering/src/glsl/sector/primitives/eccentricCone.frag +++ b/viewer/packages/rendering/src/glsl/sector/primitives/eccentricCone.frag @@ -104,7 +104,7 @@ void main() if (intersectionPointZ <= 0.0 || intersectionPointZ >= L || - isClipped(appearance, p) || + isClipped(p) || rayTargetDist + dist < 0.0 ) { // Either intersection point is behind starting point (happens inside the cone), @@ -115,7 +115,7 @@ void main() if (intersectionPointZ <= 0.0 || intersectionPointZ >= L || - isClipped(appearance, p) || + isClipped(p) || rayTargetDist + dist < 0.0 ) { // Missed the other point too diff --git a/viewer/packages/rendering/src/glsl/sector/primitives/ellipsoidSegment.frag b/viewer/packages/rendering/src/glsl/sector/primitives/ellipsoidSegment.frag index 674387841bd..24092a33521 100644 --- a/viewer/packages/rendering/src/glsl/sector/primitives/ellipsoidSegment.frag +++ b/viewer/packages/rendering/src/glsl/sector/primitives/ellipsoidSegment.frag @@ -81,7 +81,7 @@ void main() if (intersectionPointZ <= vRadius - height || intersectionPointZ > vRadius || - isClipped(appearance, p) + isClipped(p) ) { // Missed the first point, check the other point @@ -90,7 +90,7 @@ void main() p = rayTarget + dist * rayDirection; if (intersectionPointZ <= vRadius - height || intersectionPointZ > vRadius || - isClipped(appearance, p) + isClipped(p) ) { // Missed the other point too discard; diff --git a/viewer/packages/rendering/src/glsl/sector/primitives/generalCylinder.frag b/viewer/packages/rendering/src/glsl/sector/primitives/generalCylinder.frag index 41a768f67f7..44940bffe93 100644 --- a/viewer/packages/rendering/src/glsl/sector/primitives/generalCylinder.frag +++ b/viewer/packages/rendering/src/glsl/sector/primitives/generalCylinder.frag @@ -90,7 +90,7 @@ void main() if (dot(intersectionPoint - planeACenter, planeANormal) > 0.0 || dot(intersectionPoint - planeBCenter, planeBNormal) > 0.0 || theta > v_angles[1] + v_angles[0] || - isClipped(appearance, p) || + isClipped(p) || rayTargetDist + dist < 0.0 ) { // Missed the first point, check the other point @@ -102,7 +102,7 @@ void main() p = rayTarget + dist*rayDirection; if (dot(intersectionPoint - planeACenter, planeANormal) > 0.0 || dot(intersectionPoint - planeBCenter, planeBNormal) > 0.0 || - theta > v_angles[1] + v_angles[0] || isClipped(appearance, p) || + theta > v_angles[1] + v_angles[0] || isClipped(p) || rayTargetDist + dist < 0.0 ) { // Missed the other point too diff --git a/viewer/packages/rendering/src/glsl/sector/primitives/generalring.frag b/viewer/packages/rendering/src/glsl/sector/primitives/generalring.frag index 59a9e50ae02..1da45bfc377 100644 --- a/viewer/packages/rendering/src/glsl/sector/primitives/generalring.frag +++ b/viewer/packages/rendering/src/glsl/sector/primitives/generalring.frag @@ -30,7 +30,7 @@ void main() // Redo appearance texture lookup from vertex shader due to limit in transferable attributes NodeAppearance appearance = determineNodeAppearance(colorDataTexture, treeIndexTextureSize, v_treeIndex); - if (isClipped(appearance, vViewPosition)) { + if (isClipped(vViewPosition)) { discard; } diff --git a/viewer/packages/rendering/src/glsl/sector/primitives/torusSegment.frag b/viewer/packages/rendering/src/glsl/sector/primitives/torusSegment.frag index f9c33d5b5f1..63138764043 100644 --- a/viewer/packages/rendering/src/glsl/sector/primitives/torusSegment.frag +++ b/viewer/packages/rendering/src/glsl/sector/primitives/torusSegment.frag @@ -21,7 +21,7 @@ void main() { highp float v_treeIndex = unpackTreeIndex(v_treeIndexPacked); NodeAppearance appearance = nodeAppearanceFromTexel(v_nodeAppearanceTexel); - if (isClipped(appearance, vViewPosition)) { + if (isClipped(vViewPosition)) { discard; } diff --git a/viewer/packages/rendering/src/glsl/sector/primitives/trapezium.frag b/viewer/packages/rendering/src/glsl/sector/primitives/trapezium.frag index f9c33d5b5f1..63138764043 100644 --- a/viewer/packages/rendering/src/glsl/sector/primitives/trapezium.frag +++ b/viewer/packages/rendering/src/glsl/sector/primitives/trapezium.frag @@ -21,7 +21,7 @@ void main() { highp float v_treeIndex = unpackTreeIndex(v_treeIndexPacked); NodeAppearance appearance = nodeAppearanceFromTexel(v_nodeAppearanceTexel); - if (isClipped(appearance, vViewPosition)) { + if (isClipped(vViewPosition)) { discard; }