| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 | 
							- import Check from "../../Core/Check.js";
 
- import clone from "../../Core/clone.js";
 
- import combine from "../../Core/combine.js";
 
- import defined from "../../Core/defined.js";
 
- import Matrix4 from "../../Core/Matrix4.js";
 
- import BlendingState from "../BlendingState.js";
 
- import DepthFunction from "../DepthFunction.js";
 
- import ModelExperimentalUtility from "./ModelExperimentalUtility.js";
 
- import ModelLightingOptions from "./ModelLightingOptions.js";
 
- /**
 
-  * Each node may have many mesh primitives. Most model pipeline stages operate
 
-  * at the primitive level. Again, properties are inherited from the parent.
 
-  *
 
-  * @param {NodeRenderResources} nodeRenderResources The node resources to inherit from
 
-  * @param {ModelExperimentalPrimitive} runtimePrimitive The primitive.
 
-  *
 
-  * @private
 
-  */
 
- export default function PrimitiveRenderResources(
 
-   nodeRenderResources,
 
-   runtimePrimitive
 
- ) {
 
-   //>>includeStart('debug', pragmas.debug);
 
-   Check.typeOf.object("nodeRenderResources", nodeRenderResources);
 
-   Check.typeOf.object("runtimePrimitive", runtimePrimitive);
 
-   //>>includeEnd('debug');
 
-   // Properties inherited from NodeRenderResources.
 
-   /**
 
-    * A reference to the model. Inherited from the node render resources.
 
-    *
 
-    * @type {ModelExperimental}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.model = nodeRenderResources.model;
 
-   /**
 
-    * A reference to the runtime node. Inherited from the node render resources.
 
-    *
 
-    * @type {ModelExperimentalNode}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.runtimeNode = nodeRenderResources.runtimeNode;
 
-   /**
 
-    * The vertex attributes. This is shallow cloned from the node render
 
-    * resources as the primitive will add additional properties.
 
-    *
 
-    * @type {Object[]}
 
-    *
 
-    * @private
 
-    */
 
-   this.attributes = nodeRenderResources.attributes.slice();
 
-   /**
 
-    * The index to give to the next vertex attribute added to the attributes array. POSITION
 
-    * takes index 0. Inherited from the node render resources.
 
-    *
 
-    * @type {Number}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.attributeIndex = nodeRenderResources.attributeIndex;
 
-   /**
 
-    * The set index to assign to feature ID vertex attribute(s) created from the offset/repeat in the feature ID attribute.
 
-    * Inherited from the node render resources.
 
-    *
 
-    * @type {Number}
 
-    *
 
-    * @private
 
-    */
 
-   this.featureIdVertexAttributeSetIndex =
 
-     nodeRenderResources.featureIdVertexAttributeSetIndex;
 
-   /**
 
-    * Whether or not this primitive has a property table for storing metadata.
 
-    * When present, picking and styling can use this
 
-    *
 
-    * @type {Boolean}
 
-    * @default false
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.hasPropertyTable = false;
 
-   /**
 
-    * A dictionary mapping uniform name to functions that return the uniform
 
-    * values. Inherited from the node render resources.
 
-    *
 
-    * @type {Object.<String, Function>}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.uniformMap = clone(nodeRenderResources.uniformMap);
 
-   /**
 
-    * Options for configuring the alpha stage such as pass and alpha mode. Inherited from the node
 
-    * render resources.
 
-    *
 
-    * @type {ModelAlphaOptions}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.alphaOptions = clone(nodeRenderResources.alphaOptions);
 
-   /**
 
-    * An object used to build a shader incrementally. This is cloned from the
 
-    * node render resources because each primitive can compute a different shader.
 
-    *
 
-    * @type {ShaderBuilder}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.shaderBuilder = nodeRenderResources.shaderBuilder.clone();
 
-   /**
 
-    * The number of instances. Default is 0, if instancing is not used. Inherited from the node render resources.
 
-    *
 
-    * @type {Number}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.instanceCount = nodeRenderResources.instanceCount;
 
-   /**
 
-    * A reference to the runtime primitive
 
-    *
 
-    * @type {ModelExperimentalPrimitive}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.runtimePrimitive = runtimePrimitive;
 
-   /**
 
-    * The primitive associated with the render resources.
 
-    *
 
-    * @type {ModelComponents.Primitive}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   const primitive = runtimePrimitive.primitive;
 
-   // other properties
 
-   /**
 
-    * The number of indices in the primitive. The interpretation of this
 
-    * depends on the primitive type.
 
-    *
 
-    * @type {Number}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.count = defined(primitive.indices)
 
-     ? primitive.indices.count
 
-     : ModelExperimentalUtility.getAttributeBySemantic(primitive, "POSITION")
 
-         .count;
 
-   /**
 
-    * The indices for this primitive
 
-    *
 
-    * @type {ModelComponents.Indices}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.indices = primitive.indices;
 
-   /**
 
-    * The primitive type such as TRIANGLES or POINTS
 
-    *
 
-    * @type {PrimitiveType}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.primitiveType = primitive.primitiveType;
 
-   /**
 
-    * The bounding sphere that contains all the vertices in this primitive.
 
-    *
 
-    * @type {BoundingSphere}
 
-    */
 
-   this.boundingSphere = ModelExperimentalUtility.createBoundingSphere(
 
-     primitive,
 
-     Matrix4.IDENTITY,
 
-     nodeRenderResources.instancingTranslationMax,
 
-     nodeRenderResources.instancingTranslationMin
 
-   );
 
-   /**
 
-    * Options for configuring the lighting stage such as selecting between
 
-    * unlit and PBR shading.
 
-    *
 
-    * @type {ModelLightingOptions}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.lightingOptions = new ModelLightingOptions();
 
-   /**
 
-    * The shader variable to use for picking.
 
-    *
 
-    * @type {String}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.pickId = undefined;
 
-   /**
 
-    * An object storing options for creating a {@link RenderState}.
 
-    * the pipeline stages simply set the options, the render state is created
 
-    * when the {@link DrawCommand} is constructed.
 
-    *
 
-    * @type {Object}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.renderStateOptions = combine(nodeRenderResources.renderStateOptions, {
 
-     depthTest: {
 
-       enabled: true,
 
-       func: DepthFunction.LESS_OR_EQUAL,
 
-     },
 
-     blending: BlendingState.DISABLED,
 
-   });
 
-   /**
 
-    * An enum describing the types of draw commands needed, based on the style.
 
-    *
 
-    * @type {StyleCommandsNeeded}
 
-    * @readonly
 
-    *
 
-    * @private
 
-    */
 
-   this.styleCommandsNeeded = undefined;
 
- }
 
 
  |