You are absolutely correct, we are replacing all asserts with runtime exceptions.
Lovely! Having played with asserts for a while now, I've decided that they have
one purpose - internal sanity checks. They should never be used for anything else, as such use
always causes problems and confusion down the line.
However your RuntimeExceptions work, please make them consistent!
So we might just hide create and destroy and just leave isCreated() public. What do you think of that?
Sounds good! That will also get rid of the old
which object do I destroy first? problem. If it's possible for LWJGL to handle all this, don't make the user do it.
I don't yet see any value in a LWJGLException class. Either the call worked, or it didn't. The whole checked exception argument in Java is supposed to make more robust code but it simply makes programming more annoying and difficult without actually increasing robustness.
This isn't a checked or unchecked argument - it's just removing references to "Exception". Specific libraries should throw specific and known exceptions - even if that exception is just a single "whoops".
Being able to catch all LWJGL exceptions but leave others to propagate is very useful. Declaring that a method "throws Exception" is just plain ugly. Just by throwing an LWJGLException instead of an Exception, you make the example code much easier to read and understand. And it'll only cost you a ~500 byte class.