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.
332 lines
9.5 KiB
JavaScript
332 lines
9.5 KiB
JavaScript
import { Color } from "../../Source/Cesium.js";
|
|
import { IndexDatatype } from "../../Source/Cesium.js";
|
|
import { Buffer } from "../../Source/Cesium.js";
|
|
import { BufferUsage } from "../../Source/Cesium.js";
|
|
import { Context } from "../../Source/Cesium.js";
|
|
import { ContextLimits } from "../../Source/Cesium.js";
|
|
import createContext from "../createContext.js";
|
|
|
|
describe(
|
|
"Renderer/Context",
|
|
function () {
|
|
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 texture filter anisotropic extension", function () {
|
|
expect(context.textureFilterAnisotropic).toBeDefined();
|
|
});
|
|
|
|
it("gets maximum texture filter anisotropy", function () {
|
|
if (context.textureFilterAnisotropic) {
|
|
expect(
|
|
ContextLimits.maximumTextureFilterAnisotropy
|
|
).toBeGreaterThanOrEqualTo(2);
|
|
} 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"
|
|
);
|