Speeding up WebGL program

Quick update: I now believe that it has nothing to do with WebGL.

I’ve created a new Ellie.

I’ve replaced the Dict with an Array → im now getting 14 Frames locally, 7 in Ellie.

Also i added a way to skip frames (renderEvery on line 55). If this would be a WebGL issue, then the frames should not change when increasing renderEvery. But in fact when doubling it, the fps drop by half.

Another observation: removing the laplace function gets me up to 60 fps in Ellie. Heres the laplace function:

convolution : List ( ( Int, Int ), Float )
convolution =
    [ [ 0.05, 0.2, 0.05 ]
    , [ 0.2, -1, 0.2 ]
    , [ 0.05, 0.2, 0.05 ]
    ]
        |> List.indexedMap
            (\j list ->
                list
                    |> List.indexedMap (\i factor -> ( ( i, j ), factor ))
            )
        |> List.concat


get : ( Int, Int ) -> Array (Array a) -> Maybe a
get ( i, j ) grid =
    grid
        |> Array.get j
        |> Maybe.andThen (Array.get i)


laplace : (( Float, Float ) -> Float) -> ( Int, Int ) -> Array (Array ( Float, Float )) -> Float
laplace fun ( x, y ) dict =
    convolution
        |> List.map
            (\( ( i, j ), factor ) ->
                (dict
                    |> get ( x - 1 + i, y - 1 + j )
                    |> Maybe.map fun
                    |> Maybe.withDefault (fun ( 1, 0 ))
                )
                    * factor
            )
        |> List.sum

For a given point it sums up the neighbors (using the weights defined in convolution). Every cell has two values, thats why i need to pass fun along, the function is currently called twice per cell: once with fun = Tuple.first and once with fun = Tuple.second. My next experiment will be to get rid of fun. This should theoretically double the fps.