Вы можете вызвать glVertexPointer
с базой вашего массива вершин и glTexCoordPointer
с базой массива текстурных координат.Пока количество элементов в этих массивах совпадает с правильным (одинаковым) числом вершин, это должно работать нормально.
OpenGL не может получить прямой доступ к членам структуры.Участники будут выложены в память рядом друг с другом (см. Предостережение ниже).Если несколько структур Point находятся в серии в памяти, фактически у вас есть большой плоский список двойников.OpenGL не знает о структурах, он просто хочет один большой список (в данном случае удвоенный) значений.Но вы можете построить серию Point и передать OpenGL указатель на первый, и если расположение в памяти не является неправильным или дополненным, они будут эквивалентны.
Если вы слишком новичок вC, чтобы иметь это концептуально под вашим поясом (наряду с предостережениями о расположении памяти), тогда вам нужно просто скопировать все двойники в новый массив перед вызовом GL.
Я подвергаю сомнению пару вещей: возможно, здесь отсутствует код, но наличие Point**
вместо Point*
выглядит подозрительно, поскольку glVertexPointer
и т. Д. Будут ожидать плоский массив значений здесь.К тому же, хотя он, вероятно, уже выровнен нормально, теоретически массив этих структур не может быть запакован в память.Вы можете сделать это явно в зависимости от вашего компилятора, или вы можете поиграть с параметром stride
в вызовах GL, чтобы явно указать расстояние в памяти между каждым вертиком.