Другой возможный вариант - не уничтожать объекты и воссоздавать их, а обновлять данные в них, используя glBufferSubData()
.
Это может все еще не решить проблему кэширования, потому что вы по-прежнему помещаете новые данные в буфер, но я думаю, что это гарантированно быстрее, чем уничтожение и воссоздание буфера.
После этого изменения вы можете попробовать сыграть с параметром usage
, равным glBufferData()
, и изменить его на GL_DYNAMIC_DRAW
или GL_STREAM_DRAW
. предполагается, что они дают OpenGL подсказку о том, что буферы часто меняются и, возможно, это приведет к соответствующей оптимизации кэширования.