public void Update(IPluginIO pin, DX11RenderContext context) { for (int i = 0; i < this.FOutGeom.SliceCount; i++) { if (this.FInEnabled[i]) { if (this.FInVCnt.IsChanged || this.FInICnt.IsChanged || this.FOutGeom[i].Contains(context) == false) { if (this.FOutGeom[i].Contains(context)) { this.FOutGeom[i].Dispose(context); } this.FOutGeom[i][context] = new DX11NullGeometry(context); DX11NullIndirectDrawer ind = new DX11NullIndirectDrawer(); ind.Update(context, this.FInVCnt[i], this.FInICnt[i]); this.FOutGeom[i][context].AssignDrawer(ind); } DX11NullIndirectDrawer drawer = (DX11NullIndirectDrawer)this.FOutGeom[i][context].Drawer; if (this.FInI.PluginIO.IsConnected) { drawer.IndirectArgs.CopyInstanceCount(context.CurrentDeviceContext, this.FInI[i][context].UAV); } if (this.FInV.PluginIO.IsConnected) { drawer.IndirectArgs.CopyVertexCount(context.CurrentDeviceContext, this.FInV[i][context].UAV); } } } }
public void Update(DX11RenderContext context) { for (int i = 0; i < this.FOutGeom.SliceCount; i++) { if (this.FInEnabled[i]) { if (this.FInVCnt.IsChanged || this.FInICnt.IsChanged || this.FOutGeom[i].Contains(context) == false) { if (this.FOutGeom[i].Contains(context)) { this.FOutGeom[i].Dispose(context); } this.FOutGeom[i][context] = new DX11NullGeometry(context); DX11NullIndirectDrawer ind = new DX11NullIndirectDrawer(); ind.Update(context, this.FInVCnt[i], this.FInICnt[i]); this.FOutGeom[i][context].AssignDrawer(ind); } DX11NullIndirectDrawer drawer = (DX11NullIndirectDrawer)this.FOutGeom[i][context].Drawer; var argBuffer = drawer.IndirectArgs.Buffer; if (this.FInI.IsConnected) { int instOffset = this.FInInstOffset[i]; ResourceRegion region = new ResourceRegion(instOffset, 0, 0, instOffset + 4, 1, 1); context.CurrentDeviceContext.CopySubresourceRegion(this.FInI[i][context].Buffer, 0, region, argBuffer, 0, 4, 0, 0); } if (this.FInV.IsConnected) { int vOffset = this.FInVtxOffset[i]; ResourceRegion region = new ResourceRegion(vOffset, 0, 0, vOffset + 4, 1, 1); context.CurrentDeviceContext.CopySubresourceRegion(this.FInV[i][context].Buffer, 0, region, argBuffer, 0, 0, 0, 0); } } } }