You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
371 lines
11 KiB
JavaScript
371 lines
11 KiB
JavaScript
import { ComponentDatatype } from "../../Source/Cesium.js";
|
|
import { defaultValue } from "../../Source/Cesium.js";
|
|
import { GeometryInstance } from "../../Source/Cesium.js";
|
|
import { GeometryInstanceAttribute } from "../../Source/Cesium.js";
|
|
import { Rectangle } from "../../Source/Cesium.js";
|
|
import { RectangleGeometry } from "../../Source/Cesium.js";
|
|
import { VertexFormat } from "../../Source/Cesium.js";
|
|
import { Appearance } from "../../Source/Cesium.js";
|
|
import { DebugAppearance } from "../../Source/Cesium.js";
|
|
import { Primitive } from "../../Source/Cesium.js";
|
|
import createScene from "../createScene.js";
|
|
|
|
describe(
|
|
"Scene/DebugAppearance",
|
|
function () {
|
|
var scene;
|
|
var primitive;
|
|
var rectangle = Rectangle.fromDegrees(-10.0, -10.0, 10.0, 10.0);
|
|
|
|
beforeAll(function () {
|
|
scene = createScene();
|
|
scene.primitives.destroyPrimitives = false;
|
|
scene.frameState.scene3DOnly = false;
|
|
});
|
|
|
|
beforeEach(function () {
|
|
scene.camera.setView({ destination: rectangle });
|
|
});
|
|
|
|
afterAll(function () {
|
|
scene.destroyForSpecs();
|
|
});
|
|
|
|
afterEach(function () {
|
|
scene.primitives.removeAll();
|
|
primitive = primitive && !primitive.isDestroyed() && primitive.destroy();
|
|
});
|
|
|
|
function createInstance(vertexFormat) {
|
|
return new GeometryInstance({
|
|
geometry: new RectangleGeometry({
|
|
vertexFormat: defaultValue(vertexFormat, VertexFormat.ALL),
|
|
rectangle: rectangle,
|
|
}),
|
|
});
|
|
}
|
|
|
|
it("constructor throws without attributeName", function () {
|
|
expect(function () {
|
|
return new DebugAppearance();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("default construct with normal, bitangent, or tangent attribute name", function () {
|
|
var a = new DebugAppearance({
|
|
attributeName: "normal",
|
|
perInstanceAttribute: false,
|
|
});
|
|
|
|
expect(a.vertexShaderSource).toBeDefined();
|
|
expect(a.vertexShaderSource.indexOf("normal")).toBeGreaterThan(-1);
|
|
expect(a.vertexShaderSource.indexOf("v_normal")).toBeGreaterThan(-1);
|
|
|
|
expect(a.fragmentShaderSource).toBeDefined();
|
|
expect(a.fragmentShaderSource.indexOf("v_normal")).toBeGreaterThan(-1);
|
|
|
|
expect(a.material).not.toBeDefined();
|
|
expect(a.attributeName).toEqual("normal");
|
|
expect(a.glslDatatype).toEqual("vec3");
|
|
expect(a.renderState).toEqual(
|
|
Appearance.getDefaultRenderState(false, false)
|
|
);
|
|
expect(a.translucent).toEqual(false);
|
|
expect(a.closed).toEqual(false);
|
|
});
|
|
|
|
it("default construct with st attribute name", function () {
|
|
var a = new DebugAppearance({
|
|
attributeName: "st",
|
|
perInstanceAttribute: false,
|
|
});
|
|
|
|
expect(a.vertexShaderSource).toBeDefined();
|
|
expect(a.vertexShaderSource.indexOf("st")).toBeGreaterThan(-1);
|
|
expect(a.vertexShaderSource.indexOf("v_st")).toBeGreaterThan(-1);
|
|
|
|
expect(a.fragmentShaderSource).toBeDefined();
|
|
expect(a.fragmentShaderSource.indexOf("v_st")).toBeGreaterThan(-1);
|
|
|
|
expect(a.material).not.toBeDefined();
|
|
expect(a.attributeName).toEqual("st");
|
|
expect(a.glslDatatype).toEqual("vec2");
|
|
expect(a.renderState).toEqual(
|
|
Appearance.getDefaultRenderState(false, false)
|
|
);
|
|
expect(a.translucent).toEqual(false);
|
|
expect(a.closed).toEqual(false);
|
|
});
|
|
|
|
it("debug appearance with float attribute name", function () {
|
|
var a = new DebugAppearance({
|
|
attributeName: "rotation",
|
|
glslDatatype: "float",
|
|
perInstanceAttribute: true,
|
|
});
|
|
|
|
expect(a.vertexShaderSource).toBeDefined();
|
|
expect(a.vertexShaderSource.indexOf("rotation")).toBeGreaterThan(-1);
|
|
expect(a.vertexShaderSource.indexOf("v_rotation")).toBeGreaterThan(-1);
|
|
|
|
expect(a.fragmentShaderSource).toBeDefined();
|
|
expect(a.fragmentShaderSource.indexOf("v_rotation")).toBeGreaterThan(-1);
|
|
|
|
expect(a.material).not.toBeDefined();
|
|
expect(a.attributeName).toEqual("rotation");
|
|
expect(a.glslDatatype).toEqual("float");
|
|
expect(a.renderState).toEqual(
|
|
Appearance.getDefaultRenderState(false, false)
|
|
);
|
|
expect(a.translucent).toEqual(false);
|
|
expect(a.closed).toEqual(false);
|
|
});
|
|
|
|
it("debug appearance with vec3 attribute name", function () {
|
|
var a = new DebugAppearance({
|
|
attributeName: "str",
|
|
glslDatatype: "vec3",
|
|
perInstanceAttribute: false,
|
|
});
|
|
|
|
expect(a.vertexShaderSource).toBeDefined();
|
|
expect(a.vertexShaderSource.indexOf("str")).toBeGreaterThan(-1);
|
|
expect(a.vertexShaderSource.indexOf("v_str")).toBeGreaterThan(-1);
|
|
|
|
expect(a.fragmentShaderSource).toBeDefined();
|
|
expect(a.fragmentShaderSource.indexOf("v_str")).toBeGreaterThan(-1);
|
|
|
|
expect(a.material).not.toBeDefined();
|
|
expect(a.attributeName).toEqual("str");
|
|
expect(a.glslDatatype).toEqual("vec3");
|
|
expect(a.renderState).toEqual(
|
|
Appearance.getDefaultRenderState(false, false)
|
|
);
|
|
expect(a.translucent).toEqual(false);
|
|
expect(a.closed).toEqual(false);
|
|
});
|
|
|
|
it("debug appearance with vec4 attribute name", function () {
|
|
var a = new DebugAppearance({
|
|
attributeName: "quaternion",
|
|
glslDatatype: "vec4",
|
|
perInstanceAttribute: true,
|
|
});
|
|
|
|
expect(a.vertexShaderSource).toBeDefined();
|
|
expect(a.vertexShaderSource.indexOf("quaternion")).toBeGreaterThan(-1);
|
|
expect(a.vertexShaderSource.indexOf("v_quaternion")).toBeGreaterThan(-1);
|
|
|
|
expect(a.fragmentShaderSource).toBeDefined();
|
|
expect(a.fragmentShaderSource.indexOf("v_quaternion")).toBeGreaterThan(
|
|
-1
|
|
);
|
|
|
|
expect(a.material).not.toBeDefined();
|
|
expect(a.attributeName).toEqual("quaternion");
|
|
expect(a.glslDatatype).toEqual("vec4");
|
|
expect(a.renderState).toEqual(
|
|
Appearance.getDefaultRenderState(false, false)
|
|
);
|
|
expect(a.translucent).toEqual(false);
|
|
expect(a.closed).toEqual(false);
|
|
});
|
|
|
|
it("debug appearance throws with invalid glsl datatype", function () {
|
|
expect(function () {
|
|
return new DebugAppearance({
|
|
attributeName: "invalid_datatype",
|
|
glslDatatype: "invalid",
|
|
perInstanceAttribute: true,
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("renders normal", function () {
|
|
var vertexFormat = new VertexFormat({
|
|
position: true,
|
|
normal: true,
|
|
});
|
|
primitive = new Primitive({
|
|
geometryInstances: createInstance(vertexFormat),
|
|
appearance: new DebugAppearance({
|
|
attributeName: "normal",
|
|
perInstanceAttribute: false,
|
|
}),
|
|
asynchronous: false,
|
|
compressVertices: false,
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(primitive);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it("renders bitangent", function () {
|
|
var vertexFormat = new VertexFormat({
|
|
position: true,
|
|
normal: true,
|
|
bitangent: true,
|
|
});
|
|
primitive = new Primitive({
|
|
geometryInstances: createInstance(vertexFormat),
|
|
appearance: new DebugAppearance({
|
|
attributeName: "bitangent",
|
|
perInstanceAttribute: false,
|
|
}),
|
|
asynchronous: false,
|
|
compressVertices: false,
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(primitive);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it("renders tangent", function () {
|
|
var vertexFormat = new VertexFormat({
|
|
position: true,
|
|
normal: true,
|
|
tangent: true,
|
|
});
|
|
primitive = new Primitive({
|
|
geometryInstances: createInstance(vertexFormat),
|
|
appearance: new DebugAppearance({
|
|
attributeName: "tangent",
|
|
perInstanceAttribute: false,
|
|
}),
|
|
asynchronous: false,
|
|
compressVertices: false,
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(primitive);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it("renders st", function () {
|
|
var vertexFormat = new VertexFormat({
|
|
position: true,
|
|
st: true,
|
|
});
|
|
primitive = new Primitive({
|
|
geometryInstances: createInstance(vertexFormat),
|
|
appearance: new DebugAppearance({
|
|
attributeName: "st",
|
|
perInstanceAttribute: false,
|
|
}),
|
|
asynchronous: false,
|
|
compressVertices: false,
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(primitive);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it("renders float", function () {
|
|
var rectangleInstance = createInstance();
|
|
rectangleInstance.attributes = {
|
|
debug: new GeometryInstanceAttribute({
|
|
componentDatatype: ComponentDatatype.FLOAT,
|
|
componentsPerAttribute: 1,
|
|
value: [1.0],
|
|
}),
|
|
};
|
|
primitive = new Primitive({
|
|
geometryInstances: rectangleInstance,
|
|
appearance: new DebugAppearance({
|
|
attributeName: "debug",
|
|
glslDatatype: "float",
|
|
perInstanceAttribute: true,
|
|
}),
|
|
asynchronous: false,
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(primitive);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it("renders vec2", function () {
|
|
var rectangleInstance = createInstance();
|
|
rectangleInstance.attributes = {
|
|
debug: new GeometryInstanceAttribute({
|
|
componentDatatype: ComponentDatatype.FLOAT,
|
|
componentsPerAttribute: 2,
|
|
value: [1.0, 2.0],
|
|
}),
|
|
};
|
|
primitive = new Primitive({
|
|
geometryInstances: rectangleInstance,
|
|
appearance: new DebugAppearance({
|
|
attributeName: "debug",
|
|
glslDatatype: "vec2",
|
|
perInstanceAttribute: true,
|
|
}),
|
|
asynchronous: false,
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(primitive);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it("renders vec3", function () {
|
|
var rectangleInstance = createInstance();
|
|
rectangleInstance.attributes = {
|
|
debug: new GeometryInstanceAttribute({
|
|
componentDatatype: ComponentDatatype.FLOAT,
|
|
componentsPerAttribute: 3,
|
|
value: [1.0, 2.0, 3.0],
|
|
}),
|
|
};
|
|
primitive = new Primitive({
|
|
geometryInstances: rectangleInstance,
|
|
appearance: new DebugAppearance({
|
|
attributeName: "debug",
|
|
glslDatatype: "vec3",
|
|
perInstanceAttribute: true,
|
|
}),
|
|
asynchronous: false,
|
|
});
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(primitive);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it("renders vec4", function () {
|
|
var rectangleInstance = createInstance();
|
|
rectangleInstance.attributes = {
|
|
debug: new GeometryInstanceAttribute({
|
|
componentDatatype: ComponentDatatype.FLOAT,
|
|
componentsPerAttribute: 4,
|
|
value: [1.0, 2.0, 3.0, 4.0],
|
|
}),
|
|
};
|
|
primitive = new Primitive({
|
|
geometryInstances: rectangleInstance,
|
|
appearance: new DebugAppearance({
|
|
attributeName: "debug",
|
|
glslDatatype: "vec4",
|
|
perInstanceAttribute: true,
|
|
}),
|
|
asynchronous: false,
|
|
});
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(primitive);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
},
|
|
"WebGL"
|
|
);
|