Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add splitDirection property for PointPrimitive #11982

Open
wants to merge 23 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
947ba72
Add splitDirection to PointPrimitive
YunVlad May 13, 2024
ddea3b7
Add splitDirection to PointPrimitive
YunVlad May 13, 2024
2681891
Specs Update
YunVlad May 14, 2024
d141e93
Update CONTRIBUTORS.md
YunVlad May 14, 2024
90fba65
Update CHANGES.md
YunVlad May 14, 2024
2a6e949
Fixed formatting
YunVlad May 14, 2024
65431b3
Update CHANGES.md
YunVlad May 15, 2024
920cce1
Merge branch 'main' into splitDirection-for-PointPrimitive
YunVlad May 15, 2024
16f21fa
Add splitDirection to Billboard
YunVlad May 28, 2024
e6d4085
Merge branch 'CesiumGS:main' into splitDirection-for-Billboard
YunVlad May 30, 2024
293e3d3
Merge branch 'main' into splitDirection-for-PointPrimitive
YunVlad May 30, 2024
5fa741d
Add Sandcastle example
YunVlad May 30, 2024
fffcf2b
Changed the transmission of the splitDirection attribute
YunVlad May 30, 2024
76151a7
Merge branch 'CesiumGS:main' into splitDirection-for-PointPrimitive
YunVlad May 31, 2024
abe2e58
Merge branch 'CesiumGS:main' into splitDirection-for-Billboard
YunVlad Jun 3, 2024
c6e5ba3
Merge branch 'CesiumGS:main' into splitDirection-for-Billboard
YunVlad Jun 3, 2024
11fc71c
Merge branch 'CesiumGS:main' into splitDirection-for-Billboard
YunVlad Jun 4, 2024
8990124
Merge branch 'main' into splitDirection-for-PointPrimitive
YunVlad Jun 4, 2024
834a79f
Merge branch 'splitDirection-for-Billboard' into splitDirection-for-P…
YunVlad Jun 4, 2024
fe68fb3
Updated PointVisualizer and example
YunVlad Jun 4, 2024
505196a
Specs Update
YunVlad Jun 4, 2024
aa7fe89
Merge branch 'main' into splitDirection-for-PointPrimitive
YunVlad Jun 26, 2024
a12f124
Merge branch 'CesiumGS:main' into splitDirection-for-PointPrimitive
YunVlad Jul 3, 2024
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Changed the transmission of the splitDirection attribute
The splitDirection attribute was packaged as the 4th component to distanceDisplayConditionAndDisableDepth.
Updated PointPrimitiveCollection and shader.
  • Loading branch information
YunVlad committed May 30, 2024
commit fffcf2bf5012a902c5d5e6c4ad197cafd97901fc
56 changes: 16 additions & 40 deletions packages/engine/Source/Scene/PointPrimitiveCollection.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ const attributeLocations = {
compressedAttribute0: 2, // color, outlineColor, pick color
compressedAttribute1: 3, // show, translucency by distance, some free space
scaleByDistance: 4,
distanceDisplayConditionAndDisableDepth: 5,
splitDirection: 6,
distanceDisplayConditionAndDisableDepthAndSplitDirection: 5,
};

/**
Expand Down Expand Up @@ -218,7 +217,6 @@ function PointPrimitiveCollection(options) {
BufferUsage.STATIC_DRAW, // SCALE_BY_DISTANCE_INDEX
BufferUsage.STATIC_DRAW, // TRANSLUCENCY_BY_DISTANCE_INDEX
BufferUsage.STATIC_DRAW, // DISTANCE_DISPLAY_CONDITION_INDEX
BufferUsage.STATIC_DRAW, // SPLIT_DIRECTION_INDEX
];

const that = this;
Expand Down Expand Up @@ -495,17 +493,12 @@ function createVAF(context, numberOfPointPrimitives, buffersUsage) {
usage: buffersUsage[SCALE_BY_DISTANCE_INDEX],
},
{
index: attributeLocations.distanceDisplayConditionAndDisableDepth,
componentsPerAttribute: 3,
index:
attributeLocations.distanceDisplayConditionAndDisableDepthAndSplitDirection,
componentsPerAttribute: 4,
componentDatatype: ComponentDatatype.FLOAT,
usage: buffersUsage[DISTANCE_DISPLAY_CONDITION_INDEX],
},
{
index: attributeLocations.splitDirection,
componentsPerAttribute: 1,
componentDatatype: ComponentDatatype.FLOAT,
usage: buffersUsage[SPLIT_DIRECTION_INDEX],
},
],
numberOfPointPrimitives
); // 1 vertex per pointPrimitive
Expand Down Expand Up @@ -674,15 +667,18 @@ function writeScaleByDistance(
writer(i, near, nearValue, far, farValue);
}

function writeDistanceDisplayConditionAndDepthDisable(
function writeDistanceDisplayConditionAndDepthDisableAndSplitDirection(
pointPrimitiveCollection,
context,
vafWriters,
pointPrimitive
) {
const i = pointPrimitive._index;
const writer =
vafWriters[attributeLocations.distanceDisplayConditionAndDisableDepth];
vafWriters[
attributeLocations
.distanceDisplayConditionAndDisableDepthAndSplitDirection
];
let near = 0.0;
let far = Number.MAX_VALUE;

Expand All @@ -706,25 +702,12 @@ function writeDistanceDisplayConditionAndDepthDisable(
}
}

writer(i, near, far, disableDepthTestDistance);
}

function writeSplitDirection(
pointPrimitiveCollection,
context,
vafWriters,
pointPrimitive
) {
const i = pointPrimitive._index;
const writer = vafWriters[attributeLocations.splitDirection];
let direction = 0.0;

const split = pointPrimitive.splitDirection;
if (defined(split)) {
direction = split;
}

writer(i, direction);
writer(i, near, far, disableDepthTestDistance, direction);
}

function writePointPrimitive(
Expand Down Expand Up @@ -757,13 +740,7 @@ function writePointPrimitive(
vafWriters,
pointPrimitive
);
writeDistanceDisplayConditionAndDepthDisable(
pointPrimitiveCollection,
context,
vafWriters,
pointPrimitive
);
writeSplitDirection(
writeDistanceDisplayConditionAndDepthDisableAndSplitDirection(
pointPrimitiveCollection,
context,
vafWriters,
Expand Down Expand Up @@ -958,13 +935,12 @@ PointPrimitiveCollection.prototype.update = function (frameState) {

if (
properties[DISTANCE_DISPLAY_CONDITION_INDEX] ||
properties[DISABLE_DEPTH_DISTANCE_INDEX]
properties[DISABLE_DEPTH_DISTANCE_INDEX] ||
properties[SPLIT_DIRECTION_INDEX]
) {
writers.push(writeDistanceDisplayConditionAndDepthDisable);
}

if (properties[SPLIT_DIRECTION_INDEX]) {
writers.push(writeSplitDirection);
writers.push(
writeDistanceDisplayConditionAndDepthDisableAndSplitDirection
);
}

const numWriters = writers.length;
Expand Down
17 changes: 8 additions & 9 deletions packages/engine/Source/Shaders/PointPrimitiveCollectionVS.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@ uniform float u_maxTotalPointSize;

in vec4 positionHighAndSize;
in vec4 positionLowAndOutline;
in vec4 compressedAttribute0; // color, outlineColor, pick color
in vec4 compressedAttribute1; // show, translucency by distance, some free space
in vec4 scaleByDistance; // near, nearScale, far, farScale
in vec3 distanceDisplayConditionAndDisableDepth; // near, far, disableDepthTestDistance
in float splitDirection; // splitDirection
in vec4 compressedAttribute0; // color, outlineColor, pick color
in vec4 compressedAttribute1; // show, translucency by distance, some free space
in vec4 scaleByDistance; // near, nearScale, far, farScale
in vec4 distanceDisplayConditionAndDisableDepthAndSplitDirection; // near, far, disableDepthTestDistance, splitDirection

out vec4 v_color;
out vec4 v_outlineColor;
Expand Down Expand Up @@ -137,8 +136,8 @@ void main()
#endif

#ifdef DISTANCE_DISPLAY_CONDITION
float nearSq = distanceDisplayConditionAndDisableDepth.x;
float farSq = distanceDisplayConditionAndDisableDepth.y;
float nearSq = distanceDisplayConditionAndDisableDepthAndSplitDirection.x;
float farSq = distanceDisplayConditionAndDisableDepthAndSplitDirection.y;
if (lengthSq < nearSq || lengthSq > farSq) {
// push vertex behind camera to force it to be clipped
positionEC.xyz = vec3(0.0, 0.0, 1.0);
Expand All @@ -149,7 +148,7 @@ void main()
czm_vertexLogDepth();

#ifdef DISABLE_DEPTH_DISTANCE
float disableDepthTestDistance = distanceDisplayConditionAndDisableDepth.z;
float disableDepthTestDistance = distanceDisplayConditionAndDisableDepthAndSplitDirection.z;
if (disableDepthTestDistance == 0.0 && czm_minimumDisableDepthTestDistance != 0.0)
{
disableDepthTestDistance = czm_minimumDisableDepthTestDistance;
Expand Down Expand Up @@ -182,5 +181,5 @@ void main()
gl_Position *= show;

v_pickColor = pickColor;
v_splitDirection = splitDirection;
v_splitDirection = distanceDisplayConditionAndDisableDepthAndSplitDirection.w;
}