4

我尝试使用Gloss.Raster.Array有效地在屏幕上绘制一组点。它使用一个Array D DIM2 Color作为点的容器来绘制。目前它是一个 500x500 的数组,代表一个“位图”。

假设每一帧我生成 1 个新点来显示。

我没有找到另一种方法来调整现有的 repa 数组以包含单个新点,而不是执行 repa traverse,它看起来大致如下:

{-# INLINE traverseFn #-}
traverseFn px py = (\lookupfn i@(Z :. x :. y) -> 
    if x == px && y == py then red else lookupfn i)

newarr px py = R.traverse oldarr id (traverseFn px py)

我怀疑这可能会变得相当低效:为了一点而遍历整个 500x500 数组。但我想也许 ghc 会做一些优化魔法,但它不会。

原来是这样。我试图分析它,它说这newarr需要 97.2% 的时间。而且它的工作速度也很慢。

我对整个 haskell 和 repa 生态系统有点陌生,迈出了第一步,所以我可能不知道什么或做错了什么(在我的 repo 代码或我的分析尝试中) - 因此寻求帮助:)

是否有一些高效的方法可以在每帧上更改 repa 数组中的单个值?或者,如果我想在每一帧上加 500 分,那么答案是什么?

4

0 回答 0