why `isAvailable(0)`? That changes semantics, and it seems not meaningful to ask whether "no shader" (which is what 0 means) is supported. This usage is not documented in `isAvailable`, either.