import combine from "../../Core/combine.js"; import defaultValue from "../../Core/defaultValue.js"; /** * The batch texture stage is responsible for setting up the batch texture for the primitive. * * @namespace BatchTexturePipelineStage * @private */ var BatchTexturePipelineStage = {}; BatchTexturePipelineStage.name = "BatchTexturePipelineStage"; // Helps with debugging /** * Processes a primitive. This modifies the following parts of the render resources: * * * @param {PrimitiveRenderResources} renderResources The render resources for this primitive. * @param {ModelComponents.Primitive} primitive The primitive. * @param {FrameState} frameState The frame state. */ BatchTexturePipelineStage.process = function ( renderResources, primitive, frameState ) { var shaderBuilder = renderResources.shaderBuilder; var batchTextureUniforms = {}; var model = renderResources.model; var featureTable = model.featureTables[model.featureTableId]; // Number of features in the feature table. var featuresLength = featureTable.featuresLength; shaderBuilder.addUniform("float", "model_featuresLength"); batchTextureUniforms.model_featuresLength = function () { return featuresLength; }; // Batch texture var batchTexture = featureTable.batchTexture; shaderBuilder.addUniform("sampler2D", "model_batchTexture"); batchTextureUniforms.model_batchTexture = function () { return defaultValue(batchTexture.batchTexture, batchTexture.defaultTexture); }; // Batch texture step size shaderBuilder.addUniform("vec4", "model_textureStep"); batchTextureUniforms.model_textureStep = function () { return batchTexture.textureStep; }; // Batch texture dimensions if (batchTexture.textureDimensions.y > 1) { shaderBuilder.addDefine("MULTILINE_BATCH_TEXTURE"); shaderBuilder.addUniform("vec2", "model_textureDimensions"); batchTextureUniforms.model_textureDimensions = function () { return batchTexture.textureDimensions; }; } renderResources.uniformMap = combine( batchTextureUniforms, renderResources.uniformMap ); }; export default BatchTexturePipelineStage;