import { Cartesian3 } from "../../Source/Cesium.js"; import { PrimitiveType } from "../../Source/Cesium.js"; import { Buffer } from "../../Source/Cesium.js"; import { BufferUsage } from "../../Source/Cesium.js"; import { DrawCommand } from "../../Source/Cesium.js"; import { loadCubeMap } from "../../Source/Cesium.js"; import { ShaderProgram } from "../../Source/Cesium.js"; import { VertexArray } from "../../Source/Cesium.js"; import createContext from "../createContext.js"; describe( "Renderer/loadCubeMap", function () { var context; beforeAll(function () { context = createContext(); }); afterAll(function () { context.destroyForSpecs(); }); it("loads a cube map", function () { return loadCubeMap(context, { positiveX: "./Data/Images/Green.png", negativeX: "./Data/Images/Blue.png", positiveY: "./Data/Images/Green.png", negativeY: "./Data/Images/Blue.png", positiveZ: "./Data/Images/Green.png", negativeZ: "./Data/Images/Blue.png", }).then(function (cm) { expect(cm.width).toEqual(1); expect(cm.height).toEqual(1); var vs = "attribute vec4 position; void main() { gl_PointSize = 1.0; gl_Position = position; }"; var fs = "uniform samplerCube u_texture;" + "uniform mediump vec3 u_direction;" + "void main() { gl_FragColor = textureCube(u_texture, normalize(u_direction)); }"; var sp = ShaderProgram.fromCache({ context: context, vertexShaderSource: vs, fragmentShaderSource: fs, attributeLocations: { position: 0, }, }); var uniformMap = { direction: undefined, u_texture: function () { return cm; }, u_direction: function () { return this.direction; }, }; var va = new VertexArray({ context: context, attributes: [ { vertexBuffer: Buffer.createVertexBuffer({ context: context, typedArray: new Float32Array([0, 0, 0, 1]), usage: BufferUsage.STATIC_DRAW, }), componentsPerAttribute: 4, }, ], }); var command = new DrawCommand({ primitiveType: PrimitiveType.POINTS, shaderProgram: sp, vertexArray: va, uniformMap: uniformMap, }); // +X is green uniformMap.direction = new Cartesian3(1, 0, 0); command.execute(context); expect(context).toReadPixels([0, 255, 0, 255]); // -X is blue uniformMap.direction = new Cartesian3(-1, 0, 0); command.execute(context); expect(context).toReadPixels([0, 0, 255, 255]); // +Y is green uniformMap.direction = new Cartesian3(0, 1, 0); command.execute(context); expect(context).toReadPixels([0, 255, 0, 255]); // -Y is blue uniformMap.direction = new Cartesian3(0, -1, 0); command.execute(context); expect(context).toReadPixels([0, 0, 255, 255]); // +Z is green uniformMap.direction = new Cartesian3(0, 0, 1); command.execute(context); expect(context).toReadPixels([0, 255, 0, 255]); // -Z is blue uniformMap.direction = new Cartesian3(0, 0, -1); command.execute(context); expect(context).toReadPixels([0, 0, 255, 255]); sp.destroy(); va.destroy(); cm.destroy(); }); }); it("calls error function when positiveX does not exist", function () { return loadCubeMap(context, { positiveX: "not.found", negativeX: "./Data/Images/Blue.png", positiveY: "./Data/Images/Blue.png", negativeY: "./Data/Images/Blue.png", positiveZ: "./Data/Images/Blue.png", negativeZ: "./Data/Images/Blue.png", }) .then(function (cubeMap) { fail("should not be called"); }) .otherwise(function () {}); }); it("calls error function when negativeX does not exist", function () { return loadCubeMap(context, { positiveX: "./Data/Images/Blue.png", negativeX: "not.found", positiveY: "./Data/Images/Blue.png", negativeY: "./Data/Images/Blue.png", positiveZ: "./Data/Images/Blue.png", negativeZ: "./Data/Images/Blue.png", }) .then(function (cubeMap) { fail("should not be called"); }) .otherwise(function () {}); }); it("calls error function when positiveY does not exist", function () { return loadCubeMap(context, { positiveX: "./Data/Images/Blue.png", negativeX: "./Data/Images/Blue.png", positiveY: "not.found", negativeY: "./Data/Images/Blue.png", positiveZ: "./Data/Images/Blue.png", negativeZ: "./Data/Images/Blue.png", }) .then(function (cubeMap) { fail("should not be called"); }) .otherwise(function () {}); }); it("calls error function when negativeY does not exist", function () { return loadCubeMap(context, { positiveX: "./Data/Images/Blue.png", negativeX: "./Data/Images/Blue.png", positiveY: "./Data/Images/Blue.png", negativeY: "not.found", positiveZ: "./Data/Images/Blue.png", negativeZ: "./Data/Images/Blue.png", }) .then(function (cubeMap) { fail("should not be called"); }) .otherwise(function () {}); }); it("calls error function when positiveZ does not exist", function () { return loadCubeMap(context, { positiveX: "./Data/Images/Blue.png", negativeX: "./Data/Images/Blue.png", positiveY: "./Data/Images/Blue.png", negativeY: "./Data/Images/Blue.png", positiveZ: "not.found", negativeZ: "./Data/Images/Blue.png", }) .then(function (cubeMap) { fail("should not be called"); }) .otherwise(function () {}); }); it("calls error function when negativeZ does not exist", function () { return loadCubeMap(context, { positiveX: "./Data/Images/Blue.png", negativeX: "./Data/Images/Blue.png", positiveY: "./Data/Images/Blue.png", negativeY: "./Data/Images/Blue.png", positiveZ: "./Data/Images/Blue.png", negativeZ: "not.found", }) .then(function (cubeMap) { fail("should not be called"); }) .otherwise(function () {}); }); it("throws without a context", function () { expect(function () { loadCubeMap(undefined); }).toThrowDeveloperError(); }); it("throws without urls", function () { expect(function () { loadCubeMap(context); }).toThrowDeveloperError(); }); it("throws without positiveX", function () { expect(function () { loadCubeMap(context, { negativeX: "any.image", positiveY: "any.image", negativeY: "any.image", positiveZ: "any.image", negativeZ: "any.image", }); }).toThrowDeveloperError(); }); it("throws without negativeX", function () { expect(function () { loadCubeMap(context, { positiveX: "any.image", positiveY: "any.image", negativeY: "any.image", positiveZ: "any.image", negativeZ: "any.image", }); }).toThrowDeveloperError(); }); it("throws without positiveY", function () { expect(function () { loadCubeMap(context, { positiveX: "any.image", negativeX: "any.image", negativeY: "any.image", positiveZ: "any.image", negativeZ: "any.image", }); }).toThrowDeveloperError(); }); it("throws without negativeY", function () { expect(function () { loadCubeMap(context, { positiveX: "any.image", negativeX: "any.image", positiveY: "any.image", positiveZ: "any.image", negativeZ: "any.image", }); }).toThrowDeveloperError(); }); it("throws without positiveZ", function () { expect(function () { loadCubeMap(context, { positiveX: "any.image", negativeX: "any.image", positiveY: "any.image", negativeY: "any.image", negativeZ: "any.image", }); }).toThrowDeveloperError(); }); it("throws without negativeZ", function () { expect(function () { loadCubeMap(context, { positiveX: "any.image", negativeX: "any.image", positiveY: "any.image", negativeY: "any.image", positiveZ: "any.image", }); }).toThrowDeveloperError(); }); }, "WebGL" );