87 lines
1.5 KiB
Go
87 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"code.google.com/p/x-go-binding/ui/x11"
|
|
"fmt"
|
|
"image"
|
|
"image/color"
|
|
"image/draw"
|
|
"log"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
var randcol = genrandcol()
|
|
|
|
func genrandcol() <-chan color.Color {
|
|
c := make(chan color.Color)
|
|
|
|
go func() {
|
|
for {
|
|
select {
|
|
case c <- image.Black:
|
|
case c <- image.White:
|
|
}
|
|
}
|
|
}()
|
|
|
|
return c
|
|
}
|
|
|
|
func gennoise(screen draw.Image) {
|
|
for y := 0; y < 240; y++ {
|
|
for x := 0; x < 320; x++ {
|
|
screen.Set(x, y, <-randcol)
|
|
}
|
|
}
|
|
}
|
|
|
|
func fps() chan<- bool {
|
|
up := make(chan bool)
|
|
|
|
go func() {
|
|
var frames int64
|
|
var lasttime time.Time
|
|
var totaltime time.Duration
|
|
|
|
for {
|
|
<-up
|
|
frames++
|
|
now := time.Now()
|
|
totaltime += now.Sub(lasttime)
|
|
if totaltime > time.Second {
|
|
fmt.Printf("FPS: %v\n", float64(frames)/totaltime.Seconds())
|
|
frames = 0
|
|
totaltime = 0
|
|
}
|
|
lasttime = now
|
|
}
|
|
}()
|
|
|
|
return up
|
|
}
|
|
|
|
func main() {
|
|
win, err := x11.NewWindow()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
defer win.Close()
|
|
|
|
go func() {
|
|
upfps := fps()
|
|
screen := win.Screen()
|
|
|
|
for {
|
|
gennoise(screen)
|
|
|
|
win.FlushImage()
|
|
|
|
upfps <- true
|
|
}
|
|
}()
|
|
|
|
for _ = range win.EventChan() {
|
|
}
|
|
}
|