-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
Hi @nati,
I hope you don't mind me offering some suggestions.
It would seem your main goroutine can be reduced down to:
go func() {
i := 0
for _ = range ticker.C {
currentState := maps[i%2]
nextState := maps[(i+1)%2]
start := time.Now()
//lifegame.NextParallel(currentState, nextState)
lifegame.Next(currentState, nextState)
elasped := time.Since(start)
fmt.Printf("elasped %s \n", elasped)
if addNoise {
if i < 50 {
lifegame.RandomPoints(nextState, rand.Intn(noise*100))
} else {
lifegame.RandomPoints(nextState, rand.Intn(noise+1))
}
}
driver.CallSync(func() {
rgba := image.NewRGBA(image.Rect(0, 0, wSize, hSize))
lifegame.DrawMap(rgba, currentState)
texture := driver.CreateTexture(rgba, 0.5)
canvasImage.SetTexture(texture)
})
i++
}
}()I didn't see the need for WaitGroups, but for reference, instead of using a WaitGroup to do:
wg.Add(1)
go func() {
// ... stuff ...
wg.Done()
}()
wg.Wait()You can could just use a chan:
sync := make(chan struct{})
go func() {
// ... stuff ...
close(sync)
}()
<-sync // blocks until a send or a close.Here's more information about writing pipelines
Awesome stuff!
Metadata
Metadata
Assignees
Labels
No labels