Всем привет!
Вопрос по C++. Приведение типов вида (T*)val
объявлено устаревшим. Для корректного приведения используется "..._cast". В случае c указателями работает reinterpret_cast<T*>(val)
. Но в качественном исходном коде фрагментов с приведением типов (особенно reinterpret_cast) должно быть по возможности меньше. Как правильно передать данные для последнего атрибута в вызове функции glVertexAttribPointer из API OpenGL, который должен быть указателем? Из примера:
int offset = 5 * sizeof(float);
//1. работает / устаревший функционал
glVertexAttribPointer(attrib_idx, 3, GL_FLOAT, false, stride, (int*)offset);
//2. работает / плохой код
glVertexAttribPointer(attrib_idx, 3, GL_FLOAT, false, stride, reinterpret_cast<int*>(offset));
//3. НЕ РАБОТАЕТ
int * ptr_offset = &offset;
glVertexAttribPointer(attrib_idx, 3, GL_FLOAT, false, stride, ptr_offset);
Где в третьем варианте ошибка, как корректно сформировать значение для последнего параметра без приведения типа?
ОТВЕТ: без использования функции приведения типов reinterpret_cast (в явном или скрытом виде) не работает - связано в особенностями реализации API OpenGL.