servo / surfman

Accelerated offscreen graphics for WebGL
Apache License 2.0
173 stars 84 forks source link

`CGLCreateContext` fails when creating a context through WebRender from WebGL. #82

Open samgiles opened 7 years ago

samgiles commented 7 years ago

CGLCreateContext fails with error code 10009 when creating via WR from WebGL.

"Invalid share context. Two contexts are a bad match if their pixel formats use different renderers; this can happen if, for example, one format required an accumulation buffer that could be provided only by the software renderer, and the other format did not."

This causes Servo to fallback to a nice and slow alternative.

emilio commented 7 years ago

Yes, I believe this is the same underlying issue than https://github.com/servo/servo/issues/11138. Mainly, WR uses a core context, and we use a compatibility one, and CGL freaks out so we have to fall back to readback.

My idea for this was fixing it properly (only use shared textures via IOSurface/GLXPixmap/etc., and not sharing contexts as a whole), but I don't have neither time right now, nor a OSX machine :(

emilio commented 7 years ago

If we want to fix this sharing contexts, we could request a core context for CGL, and then emulate all the compatibility stuff WebGL requires in the renderer, but I don't know if that's a great idea.

samgiles commented 7 years ago

If we want to fix this sharing contexts, we could request a core context for CGL, and then emulate all the compatibility stuff WebGL requires in the renderer, but I don't know if that's a great idea.

Isn't this essentially what ANGLE does?

emilio commented 7 years ago

Isn't this essentially what ANGLE does?

Pretty much. I wrote the bindings for the shader validation side of Angle (https://github.com/servo/angle), perhaps we could extend that, though right now the renderer uses Gleam, so hooking the gl functions may be nontrivial. I believe this should be way easier once #81, and the related gleam and WR PRs have landed.

samgiles commented 7 years ago

Nice! That definitely looks like a robust path after #81.