2010-12-15 12 views
2

QtとOpenGLを使ってC++プロジェクトを作成しようとしています.Linuxマシンで自宅のWindows 7マシンにコンパイルされていますが、難しそうです。最初に、GL_TEXTURE0のようないくつかのglのものはgl.hがウィンドウのために定義していないので、もはや定義されていないことを学びました。また、私が持っているglext.hはglActiveTextureのようないくつかの関数を定義していません。私が見つけたこれらの2つの問題は、新しい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をインクルードしても、まだ問題はありますが、makeはQGLShaderProgramとglextの両方で定義されているかなりのことを再定義しているので、後者のファイルがインクルードされていることを知っています。どんな助けでも本当に感謝しています。

+0

と同じくらい簡単です、それはあなたのシステムのいずれかを交換するだけで、インターネットから任意のヘッダファイルをダウンロードするには、ほとんど常に悪い考えだ(通常は動作しません)ヘッダー。 OpenGLはグラフィックドライバによって実装されているため、特殊なケースです。Windows上で(Qtを使用せずに)アクセスする典型的な方法は、実行時に関数へのポインタを取得することです。 GLEWのような拡張ライブラリはこれをもっと簡単にします。 –

答えて

0

あなたはQtのを使用している場合は、おそらくqmakeのを使用する必要があります - とちょうどあなたのqmakeのプロジェクトファイルに

QT + = openglの

を追加します。

+0

お返事ありがとうございます。私は実際にqmakeを使用しています(私はより明確にすべきでした)。私のプロジェクトの設定にOpenGLを追加してもそれを行うように見えませんでした。私はこれがインクルードと何か関係があると確信しています...このプロジェクトはLinux上でうまくコンパイルされました(glextから関数がCスタイル関数として宣言されていません) – mprice

+0

@mprice - 小さな編集、申し訳ありません。しかし、本当に適切なQtをインストールすれば、あなたのためにインクルードする必要があります。私はQt + OpenGLプロジェクトをWindowsとLinux上でヘッダを変更せずにコンパイルしています。過去のqt以外のものについては、いくつかのプラットフォームで '#include 'が必要になることがありました。 – sje397

1

あなたは正しいパスにいますが、Nick Meyerの書いたように、実行時に関数へのポインタを取得する必要があります。

Qtインストールディレクトリには、少なくとも4.6以降の素晴らしい例があります。 "Boxes"を「demos」ディレクトリからチェックしてください。 Qtのウェイでそれらの必要な機能の世話をglextensions.h/cppは周りいじるする必要が、あなたは私のような怠け者なら、単に http://glew.sourceforge.net にオーバーホップとそれを使用

1

などQtのQGLContextを使用して、ありません異なるヘッダーファイルと手動で関数ポインタを取得することができます。それは

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

とFYI

/* for each OpenGL context */ 
if(createGLContext(...) == SUCCESSFULL) 
    glewInit() 
関連する問題