DSDSWeb/static/js/Cesium-1.53/Specs/Renderer/ContextSpec.js

317 lines
9.6 KiB
JavaScript
Raw Normal View History

2024-07-11 18:02:47 +08:00
defineSuite([
'Renderer/Context',
'Core/Color',
'Core/IndexDatatype',
'Renderer/Buffer',
'Renderer/BufferUsage',
'Renderer/ContextLimits',
'Specs/createContext'
], function(
Context,
Color,
IndexDatatype,
Buffer,
BufferUsage,
ContextLimits,
createContext) {
'use strict';
var context;
beforeAll(function() {
context = createContext();
});
afterAll(function() {
context.destroyForSpecs();
});
it('has a unique ID', function() {
var c = createContext();
expect(c.id).toBeDefined();
expect(c.id).not.toEqual(context.id);
c.destroyForSpecs();
});
it('get canvas', function() {
expect(context.canvas).not.toBeNull();
});
it('get stencilBits', function() {
expect(context.stencilBits).toBeGreaterThanOrEqualTo(0);
});
it('get maximumCombinedTextureImageUnits', function() {
expect(ContextLimits.maximumCombinedTextureImageUnits).toBeGreaterThanOrEqualTo(8);
});
it('get maximumCubeMapSize', function() {
expect(ContextLimits.maximumCubeMapSize).toBeGreaterThanOrEqualTo(16);
});
it('get maximumFragmentUniformVectors', function() {
expect(ContextLimits.maximumFragmentUniformVectors).toBeGreaterThanOrEqualTo(16);
});
it('get maximumTextureImageUnits', function() {
expect(ContextLimits.maximumTextureImageUnits).toBeGreaterThanOrEqualTo(8);
});
it('get maximumRenderbufferSize', function() {
expect(ContextLimits.maximumRenderbufferSize).toBeGreaterThanOrEqualTo(1);
});
it('get maximumTextureSize', function() {
expect(ContextLimits.maximumTextureSize).toBeGreaterThanOrEqualTo(64);
});
it('get maximumVaryingVectors', function() {
expect(ContextLimits.maximumVaryingVectors).toBeGreaterThanOrEqualTo(8);
});
it('get maximumVertexAttributes', function() {
expect(ContextLimits.maximumVertexAttributes).toBeGreaterThanOrEqualTo(8);
});
it('get maximumVertexTextureImageUnits', function() {
expect(ContextLimits.maximumVertexTextureImageUnits).toBeGreaterThanOrEqualTo(0);
});
it('get maximumVertexUniformVectors', function() {
expect(ContextLimits.maximumVertexUniformVectors).toBeGreaterThanOrEqualTo(1);
});
it('get minimumAliasedLineWidth', function() {
expect(ContextLimits.minimumAliasedLineWidth).toBeLessThanOrEqualTo(1);
});
it('get maximumAliasedLineWidth', function() {
expect(ContextLimits.maximumAliasedLineWidth).toBeGreaterThanOrEqualTo(1);
});
it('get minimumAliasedPointSize', function() {
expect(ContextLimits.minimumAliasedPointSize).toBeLessThanOrEqualTo(1);
});
it('get maximumAliasedPointSize', function() {
expect(ContextLimits.maximumAliasedPointSize).toBeGreaterThanOrEqualTo(1);
});
it('get maximumViewportWidth', function() {
expect(ContextLimits.maximumViewportWidth).toBeGreaterThan(0);
});
it('get maximumViewportHeight', function() {
expect(ContextLimits.maximumViewportHeight).toBeGreaterThan(0);
});
it('gets antialias', function() {
var c = createContext({
webgl : {
antialias : false
}
});
expect(c.antialias).toEqual(false);
c.destroyForSpecs();
});
it('gets the standard derivatives extension', function() {
var fs = '';
if (context.standardDerivatives && !context.webgl2) {
fs += '#extension GL_OES_standard_derivatives : enable\n';
}
fs +=
'void main()\n' +
'{\n';
if (context.standardDerivatives) {
fs += ' gl_FragColor = vec4(dFdx(1.0), dFdy(1.0), 1.0, 1.0);\n';
} else {
fs += ' gl_FragColor = vec4(1.0);\n';
}
fs += '}';
var expected = context.standardDerivatives ? [0, 0, 255, 255] : [255, 255, 255, 255];
expect({
context : context,
fragmentShader : fs
}).contextToRender(expected);
});
it('gets the element index uint extension', function() {
if (context.elementIndexUint) {
var buffer = Buffer.createIndexBuffer({
context : context,
sizeInBytes : 6,
usage : BufferUsage.STREAM_DRAW,
indexDatatype : IndexDatatype.UNSIGNED_INT
});
expect(buffer).toBeDefined();
buffer.destroy();
} else {
expect(function() {
Buffer.createIndexBuffer({
context : context,
sizeInBytes : 6,
usage : BufferUsage.STREAM_DRAW,
indexDatatype : IndexDatatype.UNSIGNED_INT
});
}).toThrowDeveloperError();
}
});
it('gets the depth texture extension', function() {
expect(context.depthTexture).toBeDefined();
});
it('gets the texture float extension', function() {
expect(context.floatingPointTexture).toBeDefined();
});
it('gets texture filter anisotropic extension', function() {
expect(context.textureFilterAnisotropic).toBeDefined();
});
it('gets maximum texture filter anisotropy', function() {
if(context.textureFilterAnisotropic) {
expect(ContextLimits.maximumTextureFilterAnisotropy >= 2).toEqual(true);
} else {
expect(ContextLimits.maximumTextureFilterAnisotropy).toEqual(1);
}
});
it('gets vertex array object extension', function() {
expect(context.vertexArrayObject).toBeDefined();
});
it('get the fragment depth extension', function() {
if (context.fragmentDepth && !context.webgl2) {
return;
}
var fs =
'void main()\n' +
'{\n' +
' gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n' +
'}';
expect({
context : context,
fragmentShader : fs,
depth : 0.5
}).contextToRender([255, 0, 0, 255]);
var fsFragDepth = '#extension GL_EXT_frag_depth : enable\n';
fsFragDepth +=
'void main()\n' +
'{\n' +
' gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);\n';
if (context.fragmentDepth) {
fsFragDepth += ' gl_FragDepth';
if (!context.webgl2) {
fsFragDepth += 'EXT';
}
fsFragDepth += ' = 0.0;\n';
}
fsFragDepth += '}\n';
var expected = [0, 255, 0, 255];
expect({
context : context,
fragmentShader : fsFragDepth,
depth : 1.0,
clear : false
}).contextToRender(expected);
});
it('get the draw buffers extension', function() {
expect(context.drawBuffers).toBeDefined();
});
it('get the maximum number of draw buffers', function() {
if (context.drawBuffers) {
expect(ContextLimits.maximumDrawBuffers).toBeGreaterThanOrEqualTo(1);
} else {
expect(ContextLimits.maximumDrawBuffers).toEqual(1);
}
});
it('get the maximum number of color attachments', function() {
if (context.drawBuffers) {
expect(ContextLimits.maximumColorAttachments).toBeGreaterThanOrEqualTo(4);
} else {
expect(ContextLimits.maximumColorAttachments).toEqual(1);
}
});
it('can create a pick ID and retrieve an object by pick color', function() {
var o = {};
var pickId = context.createPickId(o);
expect(pickId).toBeDefined();
expect(context.getObjectByPickColor(pickId.color)).toBe(o);
});
it('throws when creating a pick ID without an object', function() {
expect(function() {
context.createPickId(undefined);
}).toThrowDeveloperError();
});
it('returns undefined when retrieving an object by unknown pick color', function() {
expect(context.getObjectByPickColor(Color.WHITE)).toBeUndefined();
});
it('throws when getObjectByPickColor is called without a color', function() {
expect(function() {
context.getObjectByPickColor(undefined);
}).toThrowDeveloperError();
});
it('fails to construct (null canvas)', function() {
expect(function() {
return new Context();
}).toThrowDeveloperError();
});
it('isDestroyed', function() {
var c = createContext();
expect(c.isDestroyed()).toEqual(false);
c.destroyForSpecs();
expect(c.isDestroyed()).toEqual(true);
});
it('destroying Context destroys objects in cache', function() {
var c = createContext();
var destroyableObject = jasmine.createSpyObj('destroyableObject', ['destroy']);
c.cache.foo = destroyableObject;
c.destroyForSpecs();
expect(destroyableObject.destroy).toHaveBeenCalled();
});
it('non-destroyable objects are allowed in the cache', function() {
var c = createContext();
var nonDestroyableObject = {};
c.cache.foo = nonDestroyableObject;
c.destroyForSpecs();
});
it('returns the underling drawingBufferWidth', function() {
var c = createContext(undefined, 1024, 768);
expect(c.drawingBufferWidth).toBe(1024);
c.destroyForSpecs();
});
it('returns the underling drawingBufferHeight', function() {
var c = createContext(undefined, 1024, 768);
expect(c.drawingBufferHeight).toBe(768);
c.destroyForSpecs();
});
}, 'WebGL');