You may choose to (or need to) use a mix of rendering options for your application.
If so, use separate windows and threads for each rendering type. When you use separate threads, one thread can still continue to update content to the display, while the other thread waits for the driver to load and start. For example, a thread can update content on the display in the background while the thread that's requesting OpenGL ES is blocked because it's waiting for the drivers to be loaded.