Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用fyne golang进行高效画布刷新_Go_Optimization_Canvas_Fyne - Fatal编程技术网

使用fyne golang进行高效画布刷新

使用fyne golang进行高效画布刷新,go,optimization,canvas,fyne,Go,Optimization,Canvas,Fyne,我有下面的代码,它显示一个窗口,生成一个光栅图像,然后用它更新窗口内容。 但是,setContent方法很慢(使用它,我拥有100%的1个cpu核心,几乎没有cpu) 我想知道是否有什么事情可以做,我在这里做的有效(修改参考底图光栅,无论如何使用gpu…)。我希望能够生成一个光栅图像,然后以~60 fps的速度高效地显示它 如果您有任何建议或其他工具可以做得更好,我们将不胜感激 主程序包 进口( “图像/颜色” “数学/兰德” “时间” “fyne.io/fyne/v2/app” “fyne.i

我有下面的代码,它显示一个窗口,生成一个光栅图像,然后用它更新窗口内容。 但是,setContent方法很慢(使用它,我拥有100%的1个cpu核心,几乎没有cpu)

我想知道是否有什么事情可以做,我在这里做的有效(修改参考底图光栅,无论如何使用gpu…)。我希望能够生成一个光栅图像,然后以~60 fps的速度高效地显示它

如果您有任何建议或其他工具可以做得更好,我们将不胜感激

主程序包
进口(
“图像/颜色”
“数学/兰德”
“时间”
“fyne.io/fyne/v2/app”
“fyne.io/fyne/v2/canvas”
)
func main(){
myApp:=app.New()
w:=myApp.NewWindow(“光栅”)
go func(){
为了{
时间。睡眠(时间。毫秒*500)
光栅:=canvas.NewRasterWithPixels(
func(u,u,w,h int)color.color{
返回颜色.RGBA{uint8(rand.Intn(255)),
uint8(兰特国际(255)),
uint8(rand.Intn(255)),0xff}
})
w、 设置内容(光栅)
}
}()
w、 设置全屏(真)
//w.调整大小(fyne.新闻大小(120100))
w、 ShowAndRun()
}

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

在我的计算机上,在Windows上,它使用大约3%的CPU进行循环。设置内容一次,然后使用
raster.Refresh()
防止内存泄漏。它每次都将使用相同的功能。我对Fyne了解不多,但我认为OpenGL完全是为您抽象的。经过一些额外的测试,我的程序的主循环以60 fps的速度运行,但是窗口中的渲染速度为~1 fps。我的CPU核心有一个是100%使用的。我猜有一个go线程控制一些底层opengl渲染(软件),它根本没有效率。