Raylib DrawTexture 性能

问题描述 投票:0回答:1

我想知道 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)
    }
}

编辑:添加了有关分形大小的信息,请参阅评论。

go fractals raylib
1个回答
0
投票

在窗口循环中的每次迭代中,您的代码都会使用提供的图像分配新纹理,因此请尝试在窗口循环之外加载纹理。

此外,如果您必须在图像上绘制某些内容,请尝试循环中的 UpdateTexture() 函数来加载新图像数据,而不是创建新纹理。这会加快速度。

最后,您可能需要设置目标 fps 以避免帧更新不一致和故障。

© www.soinside.com 2019 - 2024. All rights reserved.