質問

を利用したい機能下に暴露したOpenGLの拡張を認識しません。私はWindowsでは、どうやってるのか?

役に立ちましたか?

解決

簡単な解決策:使用 GLEW.どのよ こちらの.

ハード溶液:とした場合 本当に強い理由 を使用しないGLEW、"わらびもち"をここでいう目的達成のためのヒアリングと同じなので

特定のOpenGLの拡張の拡張Apiのご利用になられる.OpenGLの拡張子に記載され OpenGLの拡張レジストリ.

例:私の使用を希望する能力を EXT_framebuffer_object います。のApi Iの利用を希望するからこの拡張機能:

glGenFramebuffersEXT()
glBindFramebufferEXT()
glFramebufferTexture2DEXT()
glCheckFramebufferStatusEXT()
glDeleteFramebuffersEXT()

をクリックしてくださグラフィックカードを拡張します。そうであるとすればそれは作業がほぼ完了!ダウンロードとインストールを最新のドライバーをもたらします。ごグラフィックカードです。

例:グラフィックカードを自分のPCには NVIDIA6600GT.そこで、私の訪問の NVIDIA OpenGLの拡張の仕様 ページを見る EXT_framebuffer_object 拡張サポートします。その後、ダウンロードしてくださ NVIDIA OpenGL SDK インストールしてください。

ごグラフィックカードのメーカーを提供 glext.h ヘッダファイル(または同じ名前のヘッダファイル内のすべての宣言を利用するために必要な支援OpenGLの拡張子.(注な拡張がサポートできます。) のいずれかの場所にこのヘッダファイルのどこかにコンパイラで持ち上げられたりなど、そのディレクトリをコンパイラなどのディレクトリ一覧です。

を追加 #include <glext.h> 回線コードのヘッダファイルのコードです。

Open glext.h, のAPIのご利用になられるなかでそれに対応する 宣言です。

例:って探したらいいのframebuffer Apiを見ると、対応する突宣言:

typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); for GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *);

すべてのことは、そのヘッダファイル、APIの宣言に2つの形態がある。一つはwglような醜関数ポインタ宣言です。その他のメソ見る関数宣言です。

各API-拡張APIのご利用を希望する追加コードの宣言は、関数名としてタイプの突文字列になります。

例:

PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;

もうろてていることからこのような宣言する機能のポインタのタイプに対応する拡張APIとなります。

初期化これらの関数ポインタを正します。これらの機能によって明らかにされた一連の図書館やドライバーです。る必要がありま利用 wglGetProcAddress() 機能の関係ではないかと思います。

例:

glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) wglGetProcAddress("glGenFramebuffersEXT");
glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) wglGetProcAddress("glBindFramebufferEXT");
glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) wglGetProcAddress("glFramebufferTexture2DEXT");
glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) wglGetProcAddress("glCheckFramebufferStatusEXT");
glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) wglGetProcAddress("glDeleteFramebuffersEXT");

も忘れずにチェックの機能のポイント NULLの場合.場合によっ wglGetProcAddress() なの拡張機能でも初期化され、ポインタはNULLになります。

例:

if (NULL == glGenFramebuffersEXT || NULL == glBindFramebufferEXT || NULL == glFramebufferTexture2DEXT
    || NULL == glCheckFramebufferStatusEXT || NULL == glDeleteFramebuffersEXT)
{
    // Extension functions not loaded!
    exit(1);
}

きボタンを押してくださいい。使いこの関数ポインタとな機能通話が存在しています。

例:

glGenFramebuffersEXT(1, &fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, colorTex[0], 0);

参考: り越えようとOpenGL1.1Windows by Dave Astleの条項は、バスタブもすべての必要な情報と、その理由平凡で一般的な状況が存在するWindowsかであるといわれている。

他のヒント

の"強の理由'を使用しないGLEWが、図書館によってサポートされていないコンパイラ/IDEです。例:Borland C++ビルダを構築します。

その場合するための再構築を図書館からのソースです。場合でも、そうでないマニュアルの拡張荷重ンジョンとして悪いとして作られているのです。

@Kronikarz:かえで GLEW だと思うのです。NVIDIAは既に船舶とともに、その OpenGL SDK.最新のリリースした2007年に比べてグリである2006年。

ただし、ご利用の両方の図書館見とほぼ同じです。(GLEWは init() る必要が呼び出される前に呼び出され何られます。 うにする必要がなくなり、より快適な切り替えなければ発見の延長なの下でのグリー.

GL3Wは公共のドメインのスクリプトを生成する図書館の荷重だけをコア機能のためのOpenGL3/4.見つけることができgithubで

https://github.com/skaslev/gl3w

GL3Wが必要でPython2.6の図書館およびヘッダーのためのOpenGL;必要がありませんのでPythonである。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top