func (r *Regions) resize() { newSize := Mesh().Size() r.gpuCache.Free() r.gpuCache = cuda.NewBytes(prod(newSize)) for _, f := range r.hist { r.render(f) } }
func (b *Regions) shift(dx int) { // TODO: return if no regions defined r1 := b.Gpu() r2 := cuda.NewBytes(b.Mesh().NCell()) // TODO: somehow recycle defer r2.Free() newreg := byte(0) // new region at edge cuda.ShiftBytes(r2, r1, b.Mesh(), dx, newreg) r1.Copy(r2) n := Mesh().Size() x1, x2 := shiftDirtyRange(dx) for iz := 0; iz < n[Z]; iz++ { for iy := 0; iy < n[Y]; iy++ { for ix := x1; ix < x2; ix++ { r := Index2Coord(ix, iy, iz) // includes shift reg := b.get(r) if reg != 0 { b.SetCell(ix, iy, iz, reg) // a bit slowish, but hardly reached } } } } }
func (r *Regions) alloc() { mesh := r.Mesh() r.gpuCache = cuda.NewBytes(mesh.NCell()) DefRegion(0, universe) }