View source
class BatchCommandBuilder
package h3d.scene
extends Shader
import h3d.scene.Batcher
@:directlyUsed@:src({ @param var groupsInfos:StorageBuffer<Int>; @param var batchInstancesInfos:StorageBuffer<Int>; @param var passInstancesInfos:StorageBuffer<Int>; @param var subPartInfos:StorageBuffer<Int>; @param var countBuffer:RWBuffer<Int>; @param var commandBuffer:RWBuffer<Int>; @param var instanceCount:Int; @param var cullingMask:Int; var passInfosStride:Int = 2; var batchInfosStride:Int = 2; var subPartInfosStride:Int = 2; function emitInstance(instanceID:Int, indexCount:Int, instanceCount:Int, startIndex:Int, startVertex:Int, baseInstance:Int) { var instancePos = instanceID * 5; commandBuffer[instancePos + 0] = indexCount; commandBuffer[instancePos + 1] = instanceCount; commandBuffer[instancePos + 2] = startIndex; commandBuffer[instancePos + 3] = startVertex; commandBuffer[instancePos + 4] = baseInstance; }; function main() { setLayout(64, 1, 1); var passInstanceID = computeVar.workGroup.x * 64 + computeVar.localInvocationIndex; if (passInstanceID >= instanceCount) return; var passInstancePos = passInstanceID * passInfosStride; var groupInstanceID:Int = passInstancesInfos[passInstancePos + 0]; var flags:Int = passInstancesInfos[passInstancePos + 1]; var groupID:Int = flags >> 16; var batchInstanceStart = groupsInfos[groupID]; var batchInstanceID = batchInstanceStart + groupInstanceID; var batchInstancePos = batchInstanceID * batchInfosStride; var batchFlags:Int = batchInstancesInfos[batchInstancePos + 1]; var batchCullingMask:Int = batchFlags & 0xFF; if ((batchCullingMask & cullingMask) != 0) return; var lodSelected:Int = batchFlags >> 8; var subPartID:Int = flags & 0xFFFF; var subPartPos = (subPartID + lodSelected) * subPartInfosStride; var indexCount:Int = subPartInfos[subPartPos + 0]; var indexStart:Int = subPartInfos[subPartPos + 1]; var id = atomicAdd(countBuffer, 0, 1); emitInstance(id, indexCount, 1, indexStart, 0, passInstanceID); }; })@:build(hxsl.Macros.buildShader())@:autoBuild(hxsl.Macros.buildShader())Constructor
Variables
Methods
Inherited Variables
Inherited Methods
Defined by Shader
setPriority(v:Int):Void
Shader priority should only be changed before the shader is added to a material.
