【发布时间】:2021-07-25 07:58:28
【问题描述】:
我有下面的代码,它显示一个窗口,生成一个光栅图像,然后用它更新窗口内容。 但是,setContent 方法很慢(使用它我有 100% 的 1 个 cpu 核心,几乎没有 0)。
我想知道是否有什么可以有效地做我在这里所做的事情(修改底层栅格,无论如何都要使用 gpu...)。我希望能够生成带有光栅的图像,然后以约 60 fps 的速度高效显示。
任何可以做得更好的建议或其他工具将不胜感激。
package main
import (
"image/color"
"math/rand"
"time"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/canvas"
)
func main() {
myApp := app.New()
w := myApp.NewWindow("Raster")
go func() {
for {
time.Sleep(time.Millisecond * 500)
raster := canvas.NewRasterWithPixels(
func(_, _, w, h int) color.Color {
return color.RGBA{uint8(rand.Intn(255)),
uint8(rand.Intn(255)),
uint8(rand.Intn(255)), 0xff}
})
w.SetContent(raster)
}
}()
w.SetFullScreen(true)
// w.Resize(fyne.NewSize(120, 100))
w.ShowAndRun()
}
【问题讨论】:
-
在我的电脑上,在 Windows 上,循环使用大约 3% 的 CPU。设置一次内容并使用
raster.Refresh()来防止出现内存泄漏。它每次都会使用相同的功能。我对 Fyne 了解不多,但我认为 OpenGL 对你来说是完全抽象的。 -
经过一些额外测试后,我的程序的主循环以 60 fps 运行,但窗口中的渲染为 ~1 fps。我的 CPU 内核中有 1 个使用率为 100%。我猜有一个 go 线程正在控制一些底层的 opengl 渲染(软件),它根本没有效率。
标签: go optimization canvas fyne