All files / engine/Source/DataSources MaterialProperty.js

85% Statements 17/20
78.57% Branches 11/14
50% Functions 1/2
85% Lines 17/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112                                                    1x                                                                 1x                   1x                   1x   1x         1x   91x       91x 83x 83x 83x 41x   83x 83x       8x     8x   8x      
import Color from "../Core/Color.js";
import defined from "../Core/defined.js";
import DeveloperError from "../Core/DeveloperError.js";
import JulianDate from "../Core/JulianDate.js";
import Material from "../Scene/Material.js";
 
/**
 * The interface for all {@link Property} objects that represent {@link Material} uniforms.
 * This type defines an interface and cannot be instantiated directly.
 *
 * @alias MaterialProperty
 * @constructor
 * @abstract
 *
 * @see ColorMaterialProperty
 * @see CompositeMaterialProperty
 * @see GridMaterialProperty
 * @see ImageMaterialProperty
 * @see PolylineGlowMaterialProperty
 * @see PolylineOutlineMaterialProperty
 * @see StripeMaterialProperty
 */
function MaterialProperty() {
  DeveloperError.throwInstantiationError();
}
 
Object.defineProperties(MaterialProperty.prototype, {
  /**
   * Gets a value indicating if this property is constant.  A property is considered
   * constant if getValue always returns the same result for the current definition.
   * @memberof MaterialProperty.prototype
   *
   * @type {boolean}
   * @readonly
   */
  isConstant: {
    get: DeveloperError.throwInstantiationError,
  },
  /**
   * Gets the event that is raised whenever the definition of this property changes.
   * The definition is considered to have changed if a call to getValue would return
   * a different result for the same time.
   * @memberof MaterialProperty.prototype
   *
   * @type {Event}
   * @readonly
   */
  definitionChanged: {
    get: DeveloperError.throwInstantiationError,
  },
});
 
/**
 * Gets the {@link Material} type at the provided time.
 * @function
 *
 * @param {JulianDate} time The time for which to retrieve the type.
 * @returns {string} The type of material.
 */
MaterialProperty.prototype.getType = DeveloperError.throwInstantiationError;
 
/**
 * Gets the value of the property at the provided time.
 * @function
 *
 * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.
 * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.
 * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.
 */
MaterialProperty.prototype.getValue = DeveloperError.throwInstantiationError;
 
/**
 * Compares this property to the provided property and returns
 * <code>true</code> if they are equal, <code>false</code> otherwise.
 * @function
 *
 * @param {Property} [other] The other property.
 * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.
 */
MaterialProperty.prototype.equals = DeveloperError.throwInstantiationError;
 
const timeScratch = new JulianDate();
 
/**
 * @private
 */
MaterialProperty.getValue = function (time, materialProperty, material) {
  let type;
  Iif (!defined(time)) {
    time = JulianDate.now(timeScratch);
  }
 
  if (defined(materialProperty)) {
    type = materialProperty.getType(time);
    Eif (defined(type)) {
      if (!defined(material) || material.type !== type) {
        material = Material.fromType(type);
      }
      materialProperty.getValue(time, material.uniforms);
      return material;
    }
  }
 
  Iif (!defined(material) || material.type !== Material.ColorType) {
    material = Material.fromType(Material.ColorType);
  }
  Color.clone(Color.WHITE, material.uniforms.color);
 
  return material;
};
export default MaterialProperty;