DSDSWeb/static/js/Cesium-1.53/Specs/Scene/DebugAppearanceSpec.js

369 lines
12 KiB
JavaScript

defineSuite([
'Scene/DebugAppearance',
'Core/ComponentDatatype',
'Core/defaultValue',
'Core/GeometryInstance',
'Core/GeometryInstanceAttribute',
'Core/Rectangle',
'Core/RectangleGeometry',
'Core/VertexFormat',
'Scene/Appearance',
'Scene/Primitive',
'Specs/createScene'
], function(
DebugAppearance,
ComponentDatatype,
defaultValue,
GeometryInstance,
GeometryInstanceAttribute,
Rectangle,
RectangleGeometry,
VertexFormat,
Appearance,
Primitive,
createScene) {
'use strict';
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');