| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- // @ts-check
-
- import Color from "../Core/Color.js";
- import Frozen from "../Core/Frozen.js";
-
- /** @import Packable from "../Core/Packable.js"; */
- /** @import BufferPrimitive from "./BufferPrimitive.js"; */
-
- /**
- * @typedef {object} BufferPrimitiveMaterialOptions
- * @property {Color} [color=Color.WHITE] Color of fill.
- * @property {Color} [outlineColor=Color.WHITE] Color of outline.
- * @property {number} [outlineWidth=0.0] Width of outline, 0-255px.
- */
-
- /**
- * Material description for a {@link BufferPrimitive}. Abstract.
- *
- * <p>BufferPrimitiveMaterial objects are {@link Packable|packable}, stored
- * when calling {@link BufferPrimitive#setMaterial}. Subsequent changes to the
- * material will not affect the primitive until setMaterial() is called again.</p>
- *
- * @see BufferPointMaterial
- * @see BufferPolylineMaterial
- * @see BufferPolygonMaterial
- * @see Packable
- *
- * @abstract
- * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
- */
- class BufferPrimitiveMaterial {
- /** @ignore */
- static Layout = {
- COLOR_U32: 0,
- OUTLINE_COLOR_U32: 4,
- OUTLINE_WIDTH_U8: 8,
- __BYTE_LENGTH: 12,
- };
-
- /**
- * @type {BufferPrimitiveMaterial}
- * @ignore
- */
- static DEFAULT_MATERIAL;
-
- /**
- * @param {BufferPrimitiveMaterialOptions} [options]
- */
- constructor(options = Frozen.EMPTY_OBJECT) {
- /**
- * Color of fill.
- * @type {Color}
- */
- this.color = Color.clone(options.color ?? Color.WHITE);
-
- /**
- * Color of outline.
- * @type {Color}
- */
- this.outlineColor = Color.clone(options.outlineColor ?? Color.WHITE);
-
- /**
- * Width of outline, 0-255px.
- * @type {number}
- */
- this.outlineWidth = options.outlineWidth ?? 0;
- }
-
- /** @type {number} */
- static get packedLength() {
- return this.Layout.__BYTE_LENGTH;
- }
-
- /**
- * Stores the provided material into the provided array.
- *
- * @param {BufferPrimitiveMaterial} material
- * @param {DataView} view
- * @param {number} byteOffset
- */
- static pack(material, view, byteOffset) {
- view.setUint32(
- this.Layout.COLOR_U32 + byteOffset,
- material.color.toRgba(),
- true,
- );
- view.setUint32(
- this.Layout.OUTLINE_COLOR_U32 + byteOffset,
- material.outlineColor.toRgba(),
- true,
- );
- view.setUint8(
- this.Layout.OUTLINE_WIDTH_U8 + byteOffset,
- material.outlineWidth,
- );
- }
-
- /**
- * Retrieves a material from a packed array.
- *
- * @param {DataView} view The packed array.
- * @param {number} byteOffset Starting index of the element to be unpacked.
- * @param {BufferPrimitiveMaterial} result Material into which results are unpacked.
- * @returns {BufferPrimitiveMaterial} Modified result material, with results unpacked.
- */
- static unpack(view, byteOffset, result) {
- Color.fromRgba(
- view.getUint32(this.Layout.COLOR_U32 + byteOffset, true),
- result.color,
- );
- Color.fromRgba(
- view.getUint32(this.Layout.OUTLINE_COLOR_U32 + byteOffset, true),
- result.outlineColor,
- );
- result.outlineWidth = view.getUint8(
- this.Layout.OUTLINE_WIDTH_U8 + byteOffset,
- );
- return result;
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // DEBUG
-
- /**
- * Returns a JSON-serializable object representing the material. This encoding
- * is not memory-efficient, and should generally be used for debugging and
- * testing.
- *
- * @returns {Object} JSON-serializable object.
- */
- toJSON() {
- return {
- color: this.color.toCssHexString(),
- outlineColor: this.outlineColor.toCssHexString(),
- outlineWidth: this.outlineWidth,
- };
- }
- }
-
- export default BufferPrimitiveMaterial;
|