2010-12-15 112 views
2

因此,我試圖將在Linux機器上編寫和編譯的Qt和OpenGL的C++項目帶到家中的Windows 7機器上,但我遇到了一些困難。首先,我瞭解到一些gl事物(如GL_TEXTURE0)不再被定義,因爲gl.h沒有爲windows定義它們。此外,我有glext.h沒有定義一些函數,如glActiveTexture。我發現的這兩個問題都可以通過引入新的glext.h來解決。Windows/opengl glext.h構建問題

我最直接的問題似乎是我沒有正確引入它。如果我這樣做:

#define GL_GLEXT_LEGACY  //should prevent old glext.h from being included 
#define GL_GLEXT_PROTOTYPES //should make glActiveTexture be defined 
#include <qgl.h>     
#include "glext.h"   //local up-to-date glext.h 
#include <QGLShaderProgram> 

然後告訴我,我有未定義的引用glActiveTexture。如果我在glext.h之前包含了QGLShaderProgram,那麼我仍然有這個問題,但是也警告說我正在重新定義在QGLShaderProgram和glext中定義的很多東西,所以我知道後面的文件正在被包含。任何幫助真的會被讚賞。

+0

FYI那樣簡單,它幾乎總是一個壞主意(通常是行不通的),只是從互聯網上下載任意的頭文件來替換你的系統之一頭。由於OpenGL是由圖形驅動程序實現的,因此OpenGL有一些特殊情況,所以在Windows上訪問它的典型方式(無Qt)是在運行時獲取指向函數的指針。像GLEW這樣的擴展庫使得這更容易。 – 2010-12-15 23:27:06

回答

0

如果你使用Qt,你應該使用的qmake - 而只是添加

QT + = OpenGL的

到您的qmake項目文件。

+0

感謝您的回覆。我實際上一直在使用qmake(對不起,我應該更清楚)。添加opengl到我的項目配置似乎也沒有做到這一點。我很確定這與include有關...這個項目在linux上編譯得很好(將glext中缺少的函數聲明爲c樣式函數) – mprice 2010-12-15 23:23:31

+0

@mprice - 小編輯,對不起。但真正的Qt安裝應該照顧你的包裝。我有Qt + opengl項目,可以在Windows和Linux上編譯,不需要更改標題。對於過去的非qt的東西,有時我需要'#包括'在一些平臺上,而不是其他的。 – sje397 2010-12-15 23:26:28

1

你在一條正確的道路上,但像Nick Meyer所寫的那樣,你需要在運行時得到指向函數的指針。

Qt安裝目錄中已經有一個很好的例子,至少從4.6開始。從「demos」目錄檢查"Boxes"。有glextensions.h/cpp是照顧那些需要的功能在Qt的方式,使用Qt的QGLContext

1

如果你偷懶跟我一樣,只是跳了到 http://glew.sourceforge.net 和使用,無需反覆折騰用不同的頭文件和手動檢索函數指針。這是因爲

/* in every source file using OpenGL */ 
#include <GL/glew.h> 

/* for each OpenGL context */ 
if(createGLContext(...) == SUCCESSFULL) 
    glewInit()