Интуитивно я бы сказал, что да, потому что иначе вся эта «следование спецификации GLSL» не имела бы особого смысла. Я не нашел это явно упомянуто нигде, хотя. В коде я спрашиваю, если
glm::someType something{...};
(float*)&something === glm::value_ptr(something)
(Конечно, не используйте float * при использовании двойного или наполовину варианта, но вы получите точку).
«следование спецификации GLSL» не имеет особого смысла.
GLSL не определяет макет памяти. Он просто определяет лексическую структуру различных типов, например, какие элементы они имеют. GLM придерживается той же лексической структуры, но может следовать любой схеме памяти, которая подходит для него лучше всего.
Обратите внимание, что единственным интерфейсом между GLM и GLSL являются вызовы glUniform и glVertexAttrib [Pointer], а расположение их в памяти хорошо известно. И пока GLM работает с ними, все в порядке.
Других решений пока нет …