Skip to content

Add 'willReadFrequently' option to certain getContext('2d') calls #5840

@aceslowman

Description

@aceslowman

Increasing Access

Making canvas operations more performant would make sketches run better on mobile and lower-end hardware.

Most appropriate sub-area of p5.js?

  • Accessibility
  • Color
  • Core/Environment/Rendering
  • Data
  • DOM
  • Events
  • Image
  • IO
  • Math
  • Typography
  • Utilities
  • WebGL
  • Build Process
  • Unit Testing
  • Internalization
  • Friendly Errors
  • Other (specify if possible)

Feature enhancement details

When using tint() I get a canvas2d warning that says:

Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true.

The canvas specs say that passing { willReadFrequently: true } to getContext() will disable hardware acceleration on the canvas, making it perform better with getImageData(). This looks like a recent addition for Chrome at least? It's discussed in a blog post here

Would this be something that would be helpful to add wherever getImageData() is called?

Below is an example that triggers this warning. In this case it's the Filters._toPixels() call in p5.Renderer2D.prototype._getTintedImageCanvas.

let pg0;

function setup() {
  createCanvas(400, 400);
  
  pg0 = createGraphics(400,400);

}

function draw() {
  background(220);
  
  tint(255, 100);
  image(pg0,0,0);
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions