processing / processing/processing4
Detect max `smooth()` setting to avoid OpenGL errors
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 494
- Forks
- 183
- Avg merge
- 4h 39m
- Merged PRs (30d)
- 3
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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the setup() reproduction using smooth(8), P3D, and createGraphics(), then trace the PGraphics beginDraw() path that produces the reported framebuffer errors on an M1 Mac. Compare the behavior with smooth(4); done means an unsupported smooth setting is detected or handled without the OpenGL and PGraphics failures.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- computer-graphics
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100