Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 11c9755

Browse files
committedDec 19, 2018
Fixed Vector3DTileGeometry tests
1 parent 8163a79 commit 11c9755

File tree

3 files changed

+145
-44
lines changed

3 files changed

+145
-44
lines changed
 

‎Specs/Scene/Geometry3DTileContentSpec.js

+6
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,8 @@ defineSuite([
283283
globePrimitive.show = true;
284284
tilesetPrimitive.show = false;
285285
expect(scene).toRender(depthColor);
286+
globePrimitive.show = true;
287+
tilesetPrimitive.show = true;
286288
});
287289
});
288290

@@ -301,6 +303,8 @@ defineSuite([
301303
tilesetPrimitive.show = false;
302304
verifyRender(tileset, scene);
303305
verifyPick(scene);
306+
globePrimitive.show = true;
307+
tilesetPrimitive.show = true;
304308
});
305309
});
306310

@@ -320,6 +324,8 @@ defineSuite([
320324
tilesetPrimitive.show = false;
321325
verifyRender(tileset, scene);
322326
verifyPick(scene);
327+
globePrimitive.show = true;
328+
tilesetPrimitive.show = true;
323329
});
324330
});
325331

‎Specs/Scene/Vector3DTileContentSpec.js

+6
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,8 @@ defineSuite([
650650
globePrimitive.show = true;
651651
tilesetPrimitive.show = false;
652652
expect(scene).toRender(depthColor);
653+
globePrimitive.show = true;
654+
tilesetPrimitive.show = true;
653655
});
654656
});
655657

@@ -668,6 +670,8 @@ defineSuite([
668670
tilesetPrimitive.show = false;
669671
verifyRender(tileset, scene);
670672
verifyPick(scene);
673+
globePrimitive.show = true;
674+
tilesetPrimitive.show = true;
671675
});
672676
});
673677

@@ -687,6 +691,8 @@ defineSuite([
687691
tilesetPrimitive.show = false;
688692
verifyRender(tileset, scene);
689693
verifyPick(scene);
694+
globePrimitive.show = true;
695+
tilesetPrimitive.show = true;
690696
});
691697
});
692698

‎Specs/Scene/Vector3DTileGeometrySpec.js

+133-44
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,13 @@ defineSuite([
1313
'Core/RectangleGeometry',
1414
'Core/Transforms',
1515
'Renderer/Pass',
16+
'Renderer/RenderState',
1617
'Scene/Cesium3DTileBatchTable',
18+
'Scene/ClassificationType',
1719
'Scene/ColorBlendMode',
1820
'Scene/PerInstanceColorAppearance',
1921
'Scene/Primitive',
22+
'Scene/StencilConstants',
2023
'Specs/createContext',
2124
'Specs/createScene',
2225
'Specs/pollToPromise'
@@ -35,10 +38,13 @@ defineSuite([
3538
RectangleGeometry,
3639
Transforms,
3740
Pass,
41+
RenderState,
3842
Cesium3DTileBatchTable,
43+
ClassificationType,
3944
ColorBlendMode,
4045
PerInstanceColorAppearance,
4146
Primitive,
47+
StencilConstants,
4248
createContext,
4349
createScene,
4450
pollToPromise) {
@@ -57,19 +63,14 @@ defineSuite([
5763

5864
var scene;
5965
var rectangle;
60-
var depthPrimitive;
6166
var geometry;
67+
var globePrimitive;
68+
var tilesetPrimitive;
69+
var reusableGlobePrimitive;
70+
var reusableTilesetPrimitive;
6271

6372
var ellipsoid = Ellipsoid.WGS84;
6473

65-
beforeAll(function() {
66-
scene = createScene({ contextOptions : contextOptions });
67-
});
68-
69-
afterAll(function() {
70-
scene.destroyForSpecs();
71-
});
72-
7374
var mockTileset = {
7475
_statistics : {
7576
texturesByteLength : 0
@@ -83,61 +84,92 @@ defineSuite([
8384
getFeature : function(id) { return { batchId : id }; }
8485
};
8586

86-
function MockGlobePrimitive(primitive) {
87+
function createPrimitive(rectangle, pass) {
88+
var renderState;
89+
if (pass === Pass.CESIUM_3D_TILE) {
90+
renderState = RenderState.fromCache({
91+
stencilTest : StencilConstants.setCesium3DTileBit(),
92+
stencilMask : StencilConstants.CESIUM_3D_TILE_MASK,
93+
depthTest : {
94+
enabled : true
95+
}
96+
});
97+
}
98+
var depthColorAttribute = ColorGeometryInstanceAttribute.fromColor(new Color(1.0, 0.0, 0.0, 1.0));
99+
return new Primitive({
100+
geometryInstances : new GeometryInstance({
101+
geometry : new RectangleGeometry({
102+
ellipsoid : Ellipsoid.WGS84,
103+
rectangle : rectangle
104+
}),
105+
id : 'depth rectangle',
106+
attributes : {
107+
color : depthColorAttribute
108+
}
109+
}),
110+
appearance : new PerInstanceColorAppearance({
111+
translucent : false,
112+
flat : true,
113+
renderState : renderState
114+
}),
115+
asynchronous : false
116+
});
117+
}
118+
119+
function MockPrimitive(primitive, pass) {
87120
this._primitive = primitive;
88-
this.pass = Pass.CESIUM_3D_TILE;
121+
this._pass = pass;
122+
this.show = true;
89123
}
90124

91-
MockGlobePrimitive.prototype.update = function(frameState) {
125+
MockPrimitive.prototype.update = function(frameState) {
126+
if (!this.show) {
127+
return;
128+
}
129+
92130
var commandList = frameState.commandList;
93131
var startLength = commandList.length;
94132
this._primitive.update(frameState);
95133

96134
for (var i = startLength; i < commandList.length; ++i) {
97135
var command = commandList[i];
98-
command.pass = this.pass;
136+
command.pass = this._pass;
99137
}
100138
};
101139

102-
MockGlobePrimitive.prototype.isDestroyed = function() {
140+
MockPrimitive.prototype.isDestroyed = function() {
103141
return false;
104142
};
105143

106-
MockGlobePrimitive.prototype.destroy = function() {
107-
this._primitive.destroy();
144+
MockPrimitive.prototype.destroy = function() {
108145
return destroyObject(this);
109146
};
110147

111-
beforeEach(function() {
148+
beforeAll(function() {
149+
scene = createScene({ contextOptions : contextOptions });
150+
112151
rectangle = Rectangle.fromDegrees(-80.0, 20.0, -70.0, 30.0);
152+
reusableGlobePrimitive = createPrimitive(rectangle, Pass.GLOBE);
153+
reusableTilesetPrimitive = createPrimitive(rectangle, Pass.CESIUM_3D_TILE);
154+
});
113155

114-
var depthColorAttribute = ColorGeometryInstanceAttribute.fromColor(new Color(1.0, 0.0, 0.0, 1.0));
115-
var primitive = new Primitive({
116-
geometryInstances : new GeometryInstance({
117-
geometry : new RectangleGeometry({
118-
ellipsoid : ellipsoid,
119-
rectangle : rectangle
120-
}),
121-
id : 'depth rectangle',
122-
attributes : {
123-
color : depthColorAttribute
124-
}
125-
}),
126-
appearance : new PerInstanceColorAppearance({
127-
translucent : false,
128-
flat : true
129-
}),
130-
asynchronous : false
131-
});
156+
afterAll(function() {
157+
reusableGlobePrimitive.destroy();
158+
reusableTilesetPrimitive.destroy();
159+
scene.destroyForSpecs();
160+
});
132161

133-
// wrap rectangle primitive so it gets executed during the globe pass to lay down depth
134-
depthPrimitive = new MockGlobePrimitive(primitive);
162+
beforeEach(function() {
163+
// wrap rectangle primitive so it gets executed during the globe pass and 3D Tiles pass to lay down depth
164+
globePrimitive = new MockPrimitive(reusableGlobePrimitive, Pass.GLOBE);
165+
tilesetPrimitive = new MockPrimitive(reusableTilesetPrimitive, Pass.CESIUM_3D_TILE);
135166
});
136167

137168
afterEach(function() {
138169
scene.primitives.removeAll();
170+
globePrimitive = globePrimitive && !globePrimitive.isDestroyed() && globePrimitive.destroy();
171+
tilesetPrimitive = tilesetPrimitive && !tilesetPrimitive.isDestroyed() && tilesetPrimitive.destroy();
139172
geometry = geometry && !geometry.isDestroyed() && geometry.destroy();
140-
depthPrimitive = depthPrimitive && !depthPrimitive.isDestroyed() && depthPrimitive.destroy();
141173
});
142174

143175
function loadGeometries(geometries) {
@@ -217,7 +249,7 @@ defineSuite([
217249
var batchTable = new Cesium3DTileBatchTable(mockTileset, 1);
218250
batchTable.update(mockTileset, scene.frameState);
219251

220-
scene.primitives.add(depthPrimitive);
252+
scene.primitives.add(globePrimitive);
221253

222254
geometry = scene.primitives.add(new Vector3DTileGeometry(combine(geometryOptions, {
223255
center : center,
@@ -249,7 +281,7 @@ defineSuite([
249281
var batchTable = new Cesium3DTileBatchTable(mockTileset, length);
250282
batchTable.update(mockTileset, scene.frameState);
251283

252-
scene.primitives.add(depthPrimitive);
284+
scene.primitives.add(globePrimitive);
253285

254286
geometry = scene.primitives.add(new Vector3DTileGeometry(combine(geometryOptions, {
255287
center : center,
@@ -533,7 +565,7 @@ defineSuite([
533565
var batchTable = new Cesium3DTileBatchTable(mockTileset, length);
534566
batchTable.update(mockTileset, scene.frameState);
535567

536-
scene.primitives.add(depthPrimitive);
568+
scene.primitives.add(globePrimitive);
537569

538570
geometry = scene.primitives.add(new Vector3DTileGeometry({
539571
boxes : boxes,
@@ -587,7 +619,7 @@ defineSuite([
587619
var batchTable = new Cesium3DTileBatchTable(mockTileset, 1);
588620
batchTable.update(mockTileset, scene.frameState);
589621

590-
scene.primitives.add(depthPrimitive);
622+
scene.primitives.add(tilesetPrimitive);
591623

592624
geometry = scene.primitives.add(new Vector3DTileGeometry({
593625
ellipsoids : ellipsoids,
@@ -620,7 +652,7 @@ defineSuite([
620652
var batchTable = new Cesium3DTileBatchTable(mockTileset, 1);
621653
batchTable.update(mockTileset, scene.frameState);
622654

623-
scene.primitives.add(depthPrimitive);
655+
scene.primitives.add(globePrimitive);
624656

625657
geometry = scene.primitives.add(new Vector3DTileGeometry({
626658
ellipsoids : packEllipsoids([{
@@ -648,14 +680,71 @@ defineSuite([
648680
});
649681
});
650682

683+
it('renders based on classificationType' + webglMessage, function() {
684+
var radii = new Cartesian3(100.0, 100.0, 1000.0);
685+
var ellipsoids = packEllipsoids([{
686+
modelMatrix : Matrix4.IDENTITY,
687+
radii : radii
688+
}]);
689+
var ellipsoidBatchIds = new Uint16Array([0]);
690+
691+
var origin = Rectangle.center(rectangle);
692+
var center = ellipsoid.cartographicToCartesian(origin);
693+
var modelMatrix = Transforms.eastNorthUpToFixedFrame(center);
694+
695+
var bv = new BoundingSphere(center, Cartesian3.maximumComponent(radii));
696+
697+
var batchTable = new Cesium3DTileBatchTable(mockTileset, 1);
698+
batchTable.update(mockTileset, scene.frameState);
699+
700+
scene.primitives.add(globePrimitive);
701+
scene.primitives.add(tilesetPrimitive);
702+
703+
geometry = scene.primitives.add(new Vector3DTileGeometry({
704+
ellipsoids : ellipsoids,
705+
ellipsoidBatchIds : ellipsoidBatchIds,
706+
boundingVolume : bv,
707+
center : center,
708+
modelMatrix : modelMatrix,
709+
batchTable : batchTable
710+
}));
711+
return loadGeometries(geometry).then(function() {
712+
scene.camera.lookAtTransform(modelMatrix, new Cartesian3(0.0, 0.0, 1.0));
713+
714+
geometry.classificationType = ClassificationType.CESIUM_3D_TILE;
715+
globePrimitive.show = false;
716+
tilesetPrimitive.show = true;
717+
expect(scene).toRender([255, 255, 255, 255]);
718+
globePrimitive.show = true;
719+
tilesetPrimitive.show = false;
720+
expect(scene).toRender([255, 0, 0, 255]);
721+
722+
geometry.classificationType = ClassificationType.TERRAIN;
723+
globePrimitive.show = false;
724+
tilesetPrimitive.show = true;
725+
expect(scene).toRender([255, 0, 0, 255]);
726+
globePrimitive.show = true;
727+
tilesetPrimitive.show = false;
728+
expect(scene).toRender([255, 255, 255, 255]);
729+
730+
geometry.classificationType = ClassificationType.BOTH;
731+
globePrimitive.show = false;
732+
tilesetPrimitive.show = true;
733+
expect(scene).toRender([255, 255, 255, 255]);
734+
globePrimitive.show = true;
735+
tilesetPrimitive.show = false;
736+
expect(scene).toRender([255, 255, 255, 255]);
737+
});
738+
});
739+
651740
it('picks geometry' + webglMessage, function() {
652741
var origin = Rectangle.center(rectangle);
653742
var center = ellipsoid.cartographicToCartesian(origin);
654743
var modelMatrix = Transforms.eastNorthUpToFixedFrame(center);
655744

656745
var batchTable = new Cesium3DTileBatchTable(mockTileset, 1);
657746

658-
scene.primitives.add(depthPrimitive);
747+
scene.primitives.add(globePrimitive);
659748

660749
geometry = scene.primitives.add(new Vector3DTileGeometry({
661750
ellipsoids : packEllipsoids([{

0 commit comments

Comments
 (0)
Please sign in to comment.