| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | 
							- import defined from "../Core/defined.js";
 
- import PrimitiveType from "../Core/PrimitiveType.js";
 
- import BlendingState from "./BlendingState.js";
 
- import CullFace from "./CullFace.js";
 
- import getClippingFunction from "./getClippingFunction.js";
 
- import DrawCommand from "../Renderer/DrawCommand.js";
 
- import Pass from "../Renderer/Pass.js";
 
- import RenderState from "../Renderer/RenderState.js";
 
- import ShaderDestination from "../Renderer/ShaderDestination.js";
 
- import VoxelRenderResources from "./VoxelRenderResources.js";
 
- import processVoxelProperties from "./processVoxelProperties.js";
 
- /**
 
-  * @function
 
-  *
 
-  * @param {VoxelPrimitive} primitive
 
-  * @param {Context} context
 
-  *
 
-  * @private
 
-  */
 
- function buildVoxelDrawCommands(primitive, context) {
 
-   const renderResources = new VoxelRenderResources(primitive);
 
-   processVoxelProperties(renderResources, primitive);
 
-   const {
 
-     shaderBuilder,
 
-     clippingPlanes,
 
-     clippingPlanesLength,
 
-   } = renderResources;
 
-   if (clippingPlanesLength > 0) {
 
-     // Extract the getClippingPlane function from the getClippingFunction string.
 
-     // This is a bit of a hack.
 
-     const functionId = "getClippingPlane";
 
-     const entireFunction = getClippingFunction(clippingPlanes, context);
 
-     const functionSignatureBegin = 0;
 
-     const functionSignatureEnd = entireFunction.indexOf(")") + 1;
 
-     const functionBodyBegin =
 
-       entireFunction.indexOf("{", functionSignatureEnd) + 1;
 
-     const functionBodyEnd = entireFunction.indexOf("}", functionBodyBegin);
 
-     const functionSignature = entireFunction.slice(
 
-       functionSignatureBegin,
 
-       functionSignatureEnd
 
-     );
 
-     const functionBody = entireFunction.slice(
 
-       functionBodyBegin,
 
-       functionBodyEnd
 
-     );
 
-     shaderBuilder.addFunction(
 
-       functionId,
 
-       functionSignature,
 
-       ShaderDestination.FRAGMENT
 
-     );
 
-     shaderBuilder.addFunctionLines(functionId, [functionBody]);
 
-   }
 
-   // Compile shaders
 
-   const shaderBuilderPick = shaderBuilder.clone();
 
-   shaderBuilderPick.addDefine("PICKING", undefined, ShaderDestination.FRAGMENT);
 
-   const shaderProgram = shaderBuilder.buildShaderProgram(context);
 
-   const shaderProgramPick = shaderBuilderPick.buildShaderProgram(context);
 
-   const renderState = RenderState.fromCache({
 
-     cull: {
 
-       enabled: true,
 
-       face: CullFace.BACK,
 
-     },
 
-     depthTest: {
 
-       enabled: false,
 
-     },
 
-     depthMask: false,
 
-     // internally the shader does premultiplied alpha, so it makes sense to blend that way too
 
-     blending: BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,
 
-   });
 
-   // Create the draw commands
 
-   const viewportQuadVertexArray = context.getViewportQuadVertexArray();
 
-   const depthTest = primitive._depthTest;
 
-   const drawCommand = new DrawCommand({
 
-     vertexArray: viewportQuadVertexArray,
 
-     primitiveType: PrimitiveType.TRIANGLES,
 
-     renderState: renderState,
 
-     shaderProgram: shaderProgram,
 
-     uniformMap: renderResources.uniformMap,
 
-     modelMatrix: primitive._compoundModelMatrix,
 
-     pass: Pass.VOXELS,
 
-     executeInClosestFrustum: true,
 
-     owner: this,
 
-     cull: depthTest, // don't cull or occlude if depth testing is off
 
-     occlude: depthTest, // don't cull or occlude if depth testing is off
 
-   });
 
-   // Create the pick draw command
 
-   const drawCommandPick = DrawCommand.shallowClone(
 
-     drawCommand,
 
-     new DrawCommand()
 
-   );
 
-   drawCommandPick.shaderProgram = shaderProgramPick;
 
-   drawCommandPick.pickOnly = true;
 
-   // Delete the old shader programs
 
-   if (defined(primitive._drawCommand)) {
 
-     const command = primitive._drawCommand;
 
-     command.shaderProgram =
 
-       command.shaderProgram && command.shaderProgram.destroy();
 
-   }
 
-   if (defined(primitive._drawCommandPick)) {
 
-     const command = primitive._drawCommandPick;
 
-     command.shaderProgram =
 
-       command.shaderProgram && command.shaderProgram.destroy();
 
-   }
 
-   primitive._drawCommand = drawCommand;
 
-   primitive._drawCommandPick = drawCommandPick;
 
- }
 
- export default buildVoxelDrawCommands;
 
 
  |