OpenGL'nin Qt üzerinde nasıl çalıştığı konusunda daha önce bir soru yayınladım, ancak şimdi OpenGL'nin kullanım için en son işlevlerini kullanmak istiyorum. Qt'den önce glew kullanıyordum; ama Qt, glew'nin QtOpenGL başlık dosyasıyla çakıştığını söylüyor. QGLWidget ve QGLFunctions'a baktım, ama açıkçası, OpenGL'nin işlevlerine erişmek için gerçekten ne yapmam gerektiği konusunda kafam karıştı.En son OpenGL işlevlerini Qt sınıflarında kullanma 5.4
Şimdi Qt 5.4'ü Qt Creator 3.3.0 kullanarak aldım ve yeni QOpenGLWidget'i kullanıyorum; bununla birlikte, nasıl kullanılması gerektiği konusunda rehberlik eksikliği beni çok az fırlatır: Qt belgeleri oradadır ve yardımcı olur, ancak programın diğer yerlerinde kullanmak yerine sadece nasıl örneklendirileceğini gösterir. Bu QOpenGLWidget'in QGLWidget'e benzer şekilde çalıştığını anlıyorum. Qt ayrılmam gereken ayrıntılar; ancak OpenGL işlevlerini kullanmak istediği sınıf içinde bir OpenGL bağlamı oluşturmuyorum; Bu, QOpenGLWidget öğesinden devraldığı 'glWidget' sınıfında olur.
Örneğin, OpenGL kodunu kullanan benim sınıfların birinden bu alıntıyı atın:
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 şey devralan olmayan bir sınıftır. Aslında, sadece OpenGL işlevlerinin bildirimlerini alabilmesi için glew kullandı; Geçerli olup olmadıklarını bilmemize gerek yoktu, çünkü bu glew'nin işi. Sonra mainApp sınıfında, glew'yi örnekliyor olacağım. Ayrıca, Glew'inkine benzer bir şekilde çalışan bir QOpenGLFunctions sınıfının da olduğunu anlıyorum, ancak tüm bu GL sınıflarıyla birlikte, ne kullanacağını bilmek şaşırtıcı derecede kafa karıştırıcı. Dahası glGenVertexArrays (..) aramayı denedim ama QOpenGLBuffer, QOpenGLFunctions veya QOpenGLWidget içinde bulunamadı; ve şimdiye kadar bildiğim kadarıyla, OpenGL 4.5'ten bu yana yine de speklerin bir parçası; ama grafik sürücülerim OpenGL 4.5 kullanmıyor, bu yüzden OpenGL 4.3 kullanıyorum. QG'nin, OpenGL işlevlerini arama konusundaki kendi yaklaşımını benimsemesi için golew'den vazgeçmeye razı olduğumu söylemek yeterli.
Çeşitli sınıfların OpenGL işlevlerini kullandığı bir programda, glew kullanmadan bunları aramak için Qt'yi nasıl kullanabilirim? Mesh, OpenGL'yi başlatmayan ancak yalnızca işlevlerini kullanan sınıflardan biridir.
İnsanların bildiği gibi, bir süredir Qt kullanıyorum (yeterli değil!) Ve Qt'den hoşlanıyorlar; ama geliştirmeye devam etmek için OpenGL ile birlikte Qt'yi nasıl kullanabileceğimi bilmem gerekiyor. Orada çoğu öğreticiler hala 5.4 öncesi malzeme kullanıyorlar.
struct sLGLAPI
{
sLGLAPI() { memset(this, 0, sizeof(*this)); };
PFNGLACTIVETEXTUREPROC glActiveTexture;
PFNGLATTACHSHADERPROC glAttachShader;
PFNGLBEGINQUERYPROC glBeginQuery;
PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
...
OpenGL paylaşılan kitaplıktan -ed işaretçiler dlsym
ile doldurun:
'glGenVertexArrays' köşe dizisi nesneler içindir, senin main.cpp dosyasına bu kodu eklemeniz gerekir Aramanız gereken sınıf adı nedir? Bu doğru, [QOpenGLVertexArrayObject'] (http://doc.qt.io/qt-5/qopenglvertexarrayobject.html)! – peppe
Ben şahsen OpenGL şeylerini merkezi olarak depolayan Q şeylerini beğenmiyorum. Bu tür şeyleri kendi sınıflarımla yapmayı tercih ederim. – Poriferous