GStreamer OpenGL renderer creates a new texture for each frame - highly inefficient.
_new_texture in gst-build/subprojects/gst-plugins-base/gst-libs/gst/gl/gstglmemory.c
Is called once per frame. The configuration should be 2 textures of the same dimension as the video decoder output, decode into one, display from the other, then swap. Repeat until done.