Вы можете определить вас m_VAO
как std::unique_ptr<GLuint[]>
, и когда вы хотите передать указатель, управляемый интеллектуальным указателем, вы можете использовать get()
для извлечения этого необработанного указателя.
std::unique_ptr<GLuint[]> m_VAO;
m_VAO = std::make_unique<GLuint[]>(totalNumberOfPies);
glGenVertexArrays(totalNumberOfPies, m_VAO.get());
A std::unique_ptr<GLuint[]>
будет иметь смысл только в том случае, если вы также определите для него собственный деструктор, который вызывает соответствующую функцию OpenGL. Чтобы снова освободить массивы вершин. И даже в этом случае может возникнуть сомнение, если это правильный подход.
Кроме того, вы передаете умный указатель на функцию (или пишете функцию для принятия умного указателя), если эта функция собирается претендовать на владение либо напрямую, либо передайте его куда-нибудь, где заявлено право собственности.
Если вы этого не сделаете, тогда возникает вопрос, почему вы хотите использовать для этого умный указатель вместо std::vector
:
std::vector<GLuint> m_VAO;
m_VAO.resize(totalNumberOfPies);
glGenVertexArrays(m_VAO.size(), m_VAO.data());