don't use the backend context here either

we never mess with any translation matrices, so there's no reason (i
think) that this shouldn't just be the identity matrix always
reorganize initialization a bunch

this way, we can create the window with the correct dimensions from the
start, rather than creating it with arbitrary dimensions and then
resizing it later