我想知道 Raylib 的性能,特别是使用
DrawTexture
和 NewImageFromImage
函数。我有下面的代码,它是用 Go 编写的,所以我使用在这里找到的 go 绑定:https://github.com/gen2brain/raylib-go
当我运行下面的代码时(完整代码:https://github.com/Hultan/fractal),我得到了大约。每帧的结果如下:
Calculating done in 30.925822 ms!
Drawing done in 135.477039 ms!
因此它在 30 毫秒内计算(并生成图像。图像),并且绘制该图像需要四倍的时间。
我在这里使用的
Raylib
正确吗?我已经几十年没有尝试生成曼德尔布罗分形了,所以这些数字在今天可能很合理。我原以为计算部分会比绘图慢得多,而不是相反......
我确实有一张 5 年旧显卡,所以也许这就是原因......
const (
width, height = 800, 600
)
func main() {
rl.InitWindow(width, height, "fractal")
defer rl.CloseWindow()
img := image.NewRGBA(image.Rect(0, 0, width, height))
for !rl.WindowShouldClose() {
...
rl.BeginDrawing()
t := time.Now()
...
// Generating Mandelbrot fractal image into img
...
fmt.Printf("Calculating done in %v!\n", time.Since(t))
t = time.Now()
tex := rl.LoadTextureFromImage(rl.NewImageFromImage(img))
rl.DrawTexture(tex, 0, 0, rl.White)
fmt.Printf("Drawing done in %v!\n", time.Since(t))
rl.EndDrawing()
rl.UnloadTexture(tex)
}
}
编辑:添加了有关分形大小的信息,请参阅评论。
在窗口循环中的每次迭代中,您的代码都会使用提供的图像分配新纹理,因此请尝试在窗口循环之外加载纹理。
此外,如果您必须在图像上绘制某些内容,请尝试循环中的 UpdateTexture() 函数来加载新图像数据,而不是创建新纹理。这会加快速度。
最后,您可能需要设置目标 fps 以避免帧更新不一致和故障。