我正拼命地理解的架構OpenGL支持Qt5。我目前的問題是這樣的:我有一些現有的OpenGL代碼(桌面,而不是OpenGL ES),它使用一些OpenGL擴展,包括glGenBuffersARB
。外QT5能夠訪問這些功能,像這樣的擴展是微不足道的,例如,通過使用GLEW我可以簡單地這樣做:如何在Qt5中使用擴展glGenBuffersARB?
glewInit();
和預期的一樣,一切都會神奇地工作,我可以開始使用glGenBuffersARB
馬上。如果我很擔心,我可以打電話給glewIsSupported
以確保它得到支持。
但在QT5有一個警告,GLEW和QOpenGLFunctions
不玩好起來(從qopenglfunctions.h
複製):
#ifdef __GLEW_H__
#if defined(Q_CC_GNU)
#warning qopenglfunctions.h is not compatible with GLEW, GLEW defines will be undefined
#warning To use GLEW with Qt, do not include <qopengl.h> or <QOpenGLFunctions> after glew.h
#endif
#endif
所以我們可以說,我對這個問題的緣故,滿足好奇心完全拋棄GLEW並完全依靠Qt5來實現純粹的Qt5方法。我如何獲得依賴glGenBuffersARB的現有OpenGL代碼而無需手動手動綁定每個擴展函數?
注:我知道我可以按照this回答提示和做到這一點:
auto functions = context->versionFunctions<QOpenGLFunctions_3_3_Core>();
if (!functions) error();
functions->initializeOpenGLFunctions();
functions->glGenBuffersARB(...);
但後來我不得不對現有的OpenGL每一行代碼前加上functions->
,我寧願不做。
供參考:永遠不要使用'glGenBuffersARB'。 'glGenBuffers'已經成爲核心OpenGL的近十五年了。 –
我剛剛意識到這一點,對不起這是一個非常糟糕的例子,但我認爲這個問題仍然很好。試想一下,我正在談論另一個與今天相關的擴展! (這是我現有的OpenGL代碼使用的擴展)。 –