OpenGL immediate mode вообще весь официально устарел ещё 15 лет назад. Через вершинные буфера рисовать полагается.
Надо. Очень надо. Иначе у тебя каждый кадр зависит от предыдущего, и это порождает ненужные точки синхронизации. А на некоторых версиях драйверов ещё и глюки. А вот glFinish() надо делать, иначе потеряется синхронизация с кадрами на мониторе. Это нужная точка синхронизации, но она должна быть единственной.
Ну ладно, в эмуляторе первое не особо критично, но вообще -- зачем учиться делать неправильно?
PS: glClear() уже давно не стоит почти ничего. Это просто установка атрибута "константный цвет" у тайлов кадрового буфера.