processing/processing4

Detect max `smooth()` setting to avoid OpenGL errors

Open

#694 opened on Mar 26, 2023

View on GitHub
 (2 comments) (0 reactions) (0 assignees)Java (176 forks)auto 404
enhancementhelp wantedopengl

Repository metrics

Stars
 (439 stars)
PR merge metrics
 (PR metrics pending)

Description

Created by: cacheflowe

I don't think this really needs to be addressed, but I wanted to make note of the error, since I didn't find any info elsewhere. I was moving a Java project to Mac from Windows (where this isn't a problem), and it took me a bit to figure out what was causing the error.

On a Silicon Mac (I'm on an M1) with Processing 4.2, setting smooth(8) in setup() has a weird side-effect of breaking PGraphics. I now see in the smooth() documentation that 8 is a valid value, but not on all machines. This makes sense, and probably explains the error, noted below. The problem goes away if I use smooth(4) instead!

The code:

PGraphics pg;

void setup() {
  size(400, 400, P3D);
  smooth(8);

  pg = createGraphics(400, 400, P3D);
  pg.beginDraw();
  pg.fill(0, 255, 0);
  pg.rect(20, 20, 60, 60);
  pg.endDraw();
}

void draw() {
  background(0);
  image(pg, 0, 0);
  ellipse(120, 192, 144, 144);
  ellipse(280, 192, 144, 144);
}

The error:

OpenGL error 1282 at bot beginDraw(): invalid operation
RuntimeException: Cannot validate shader program:
Validation Failed: Current draw framebuffer is invalid.

RuntimeException: Cannot validate shader program:
Validation Failed: Current draw framebuffer is invalid.

If I comment out the drawing on pg, the error changes, and the app doesn't completely crash:

The code:

PGraphics pg;

void setup() {
  size(400, 400, P3D);
  smooth(8);

  pg = createGraphics(400, 400, P3D);
}

void draw() {
  background(0);
  image(pg, 0, 0);
  ellipse(120, 192, 144, 144);
  ellipse(280, 192, 144, 144);
}

The error:

UNSUPPORTED (log once): POSSIBLE ISSUE: unit 0 GLD_TEXTURE_INDEX_2D is unloadable and bound to sampler type (Float) - using zero texture because texture unloadable
OpenGL error 1282 at bot beginDraw(): invalid operation
OpenGL error 1286 at top endDraw(): invalid framebuffer operation
OpenGL error 1286 at bot endDraw(): invalid framebuffer operation
The pixels array is null.

Contributor guide