draw optimizations
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
package world
|
||||
|
||||
func (w *World) candSeenResetIfOverflow() {
|
||||
w.candEpoch++
|
||||
if w.candEpoch != 0 {
|
||||
return
|
||||
}
|
||||
// overflow: reset stamp array
|
||||
for i := range w.candStamp {
|
||||
w.candStamp[i] = 0
|
||||
}
|
||||
w.candEpoch = 1
|
||||
}
|
||||
|
||||
func (w *World) candSeenMark(id PrimitiveID) bool {
|
||||
// ensure stamp capacity
|
||||
uid := uint32(id)
|
||||
if int(uid) >= len(w.candStamp) {
|
||||
// grow to next power-ish
|
||||
n := len(w.candStamp)
|
||||
if n == 0 {
|
||||
n = 1024
|
||||
}
|
||||
for n <= int(uid) {
|
||||
n *= 2
|
||||
}
|
||||
ns := make([]uint32, n)
|
||||
copy(ns, w.candStamp)
|
||||
w.candStamp = ns
|
||||
}
|
||||
if w.candStamp[uid] == w.candEpoch {
|
||||
return true
|
||||
}
|
||||
w.candStamp[uid] = w.candEpoch
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user