OpenGL code no changes.
That doesn't sound right.
OpenGL code also has "Idle" event added. So the "paint" should happen more often than "FormPaint"
Please count FPS for OpenGL at TForm1.OpenGLControl1Paint procedure.
... btw. if OpenGL shows a better FPS now, you could add the same on Idle event for Non-GL example.
In general, video intensive applications (such as games or video players) never use Timer Events to refresh the frame, instead they either paint as much as possible or on VSync signal.
(In the gl example I'm using "idle" to draw "as much as possible")