首页 > 解决方案 > 使用 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()
}

标签: gooptimizationcanvasfyne

解决方案


设置窗口内容是一个非常昂贵的调用,因为它必须重新布局所有内容并检查大小等。只需调用 raster.Refresh() 代替。您还可以在小部件中缓存光栅像素,这样您就不必为每一帧创建新图像来刷新。


推荐阅读