go - 使用 fyne golang 进行高效的画布刷新
问题描述
我有下面的代码,它显示一个窗口,生成一个光栅图像,然后用它更新窗口内容。但是,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()
}
解决方案
设置窗口内容是一个非常昂贵的调用,因为它必须重新布局所有内容并检查大小等。只需调用 raster.Refresh() 代替。您还可以在小部件中缓存光栅像素,这样您就不必为每一帧创建新图像来刷新。
推荐阅读
- class - 状态机图中的对象是什么?
- tensorflow - 尝试将渐变应用于 2 个 keras 模型时,渐变返回 None
- swift - WatchKit:除了 HKWorkoutSession 之外,如何在 Watch 上触发像 Music App 这样的活动后台应用程序?
- github - 如何将主分支移动到github上的主分支
- wolframalpha - 使用 Wolfram|Alpha Query 参考上一个结果
- git - Git丢失了历史,而我只重命名了文件而不更改内容
- reactjs - Websocket 连接在 Safari (MacOS)、所有浏览器 (IOS 设备) 上都不起作用,但在 Windows 和 Android 中的所有浏览器上都可以正常工作
- c++ - 输出 SCD30 传感器的数据时,ESP8266 不断崩溃
- javascript - 在构建 .exe 文件时拖动文件或文件夹不启动应用程序
- c# - IConfiguration:意外的 GetValue 行为