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