Да, это вполне возможно, и на самом деле предпочтительнее хранить буферы в памяти, если вы будете обращаться к ним в течение всего срока службы вашей программы, а не освобождать и перераспределять их снова.
Я не могу говорить о способе распределения постоянных буферов в Unity — я работаю с Unity и много пишу шейдеры на Cg, но большая часть нашего материала находится на мобильных устройствах, поэтому вычислительные шейдеры не подходят. Однако в недавнем проекте, который я использовал с использованием OpenGL, буфер обычно будет зависать до тех пор, пока вы не скажете ему этого не делать, и даже в этом случае нет никакой гарантии, что память будет своевременно освобождена.
Выделение буфера в современном OpenGL выполняется путем вызова glCreateBuffers и передачи ему указателя на массив GLuint, который будет хранить «имена» ваших буферов, а затем вызова glBufferData или glBufferStorage для фактического выделения и заполнения VRAM для этого буфера. Вызов glBufferData второй раз для того же имени буфера выделит новое хранилище для этого буфера, а исходное хранилище станет «осиротевшим». Это похоже на перераспределение объекта в Java: имя переменной больше не будет указывать на этот объект, но другие части системы все еще могут иметь ссылки на него (например, если он все еще где-то используется для чтения текстуры), поэтому он будет не подлежит очистке, пока все ссылки на него не исчезнут.
Вызов glDeleteBuffers с именем буфера имеет аналогичный эффект, но без выделения нового хранилища. В обоих случаях хранилище будет нет удаляться до тех пор, пока в системе не исчезнут абсолютно все ссылки на него. Даже в этом случае это больше похоже на сбор мусора в Java, чем на удаление в C++, система вполне может удерживать память в течение довольно долгого времени, чтобы повторно использовать ее для любых будущих выделений, которые вы можете сделать.
Результатом всего этого является то, что зачастую лучше выделить буферы один раз, когда вы запускаете приложение, и по мере необходимости пропускать через них различные данные. В OpenGL буфер будет сохраняться на протяжении всего времени существования приложения, если вы явно не удалите или не перераспределите его. Я уверен, вы знаете, что система рендеринга Unity имеет свои особенности, но в принципе она должна вести себя аналогично.