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.

294 lines
8.7 KiB
JavaScript

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"
);