Przedtem napisałem pytanie o to, jak uzyskać działanie OpenGL na Qt, ale teraz chcę mieć możliwość korzystania z najnowszych funkcji OpenGL do użycia. Przed Qt używałem glew; ale Qt mówi, że glew jest w konflikcie z plikiem nagłówkowym QtOpenGL. Zajrzałem do QGLWidget i QGLFunctions, ale mówiąc szczerze, jestem zdezorientowany co do tego, co naprawdę powinienem robić, aby uzyskać dostęp do funkcji OpenGL.Używanie najnowszych funkcji OpenGL w klasach w Qt 5.4
Teraz mam Qt 5.4 przy użyciu Qt Creator 3.3.0 i korzystam z nowego QOpenGLWidget; jednak brak wskazówek co do tego, w jaki sposób powinien być użyty, rzuca mi trochę: dokumentacja Qt jest tam i pomaga, ale demonstruje tylko jak ją utworzyć, zamiast jej używać w innych lokalizacjach programu. Rozumiem, że ta QOpenGLWidget działa podobnie do QGLWidget. Qt szczegóły, które powinienem dziedziczyć; jednak nie tworzę instancji kontekstu OpenGL w klasie, która chce używać funkcji OpenGL; dzieje się to w klasie "glWidget", która dziedziczy po QOpenGLWidget.
Weźmy na przykład ten fragment z jednego z moich klas, które wykorzystuje kod OpenGL:
void Mesh::init()
{
pNumIndices = pIndices.size();
glGenVertexArrays(1, &pVAO);
glGenBuffers(1, &pVertexBuffer);
glGenBuffers(1, &pIndexBuffer);
glBindVertexArray(pVAO);
glBindBuffer(GL_ARRAY_BUFFER, pVertexBuffer);
glBufferData(GL_ARRAY_BUFFER, pVertices.size() * sizeof(Vertex),
&pVertices[0], GL_STATIC_DRAW);
// etc..
}
Mesh jest klasa, która nie dziedziczy od wszystkiego. Oryginalnie używał tylko polecenia, aby uzyskać deklaracje funkcji OpenGL; nie musiała wiedzieć, czy są ważne, czy nie, bo to jest robota. Potem w klasie mainApp bym wystąpił z instancją. Rozumiem również, że istnieje również klasa QOpenGLFunctions, która działa trochę podobnie do tej z glew, ale w przypadku wszystkich tych klas GL jest rażąco mylące wiedzieć, czego używać. Co więcej, próbowałem szukać glGenVertexArrays (..), ale nie znaleziono go w QOpenGLBuffer, QOpenGLFunctions lub QOpenGLWidget; i o ile mi wiadomo, tak jak w OpenGL 4.5 nadal jest częścią specyfikacji; ale moje sterowniki graficzne nie używają OpenGL 4.5, więc używam OpenGL 4.3. Wystarczy powiedzieć, że jestem gotów zrezygnować z dmuchania, aby przyjąć własne podejście Qt do wywoływania funkcji OpenGL.
W programie, w którym różne klasy używają funkcji OpenGL, w jaki sposób mogę wykorzystać Qt, aby móc do nich zadzwonić bez użycia glew? Siatka jest jedną z tych klas, która nie tworzy instancji OpenGL, ale jedynie wykorzystuje jej funkcje.
Po to, aby ludzie wiedzieli, używam Qt przez jakiś czas (nie wystarczy!) I cieszę się Qt; ale muszę wiedzieć, jak używać Qt w połączeniu z OpenGL, aby kontynuować rozwój. Większość tutoriali nadal używa rzeczy sprzed 5.4.
'glGenVertexArrays' jest dla obiektów tablicy wierzchołek, tak Jaka jest nazwa klasy, której powinieneś szukać? Zgadza się, ['QOpenGLVertexArrayObject'] (http://doc.qt.io/qt-5/qopenglvertexarrayobject.html)! – peppe
Osobiście nie lubię rzeczy Q, w których centralnie zajmuje się materiałami OpenGL. Bardzo lubię robić takie rzeczy sam z moimi własnymi zajęciami. – Poriferous