2016-06-11 1 views
0

私はC:\Windows\System32にある私のWindowsプラットフォーム上で OPENGL32.DLLは、OpenGL 1.1の実装であることを承知しているMSVS 2013とOpenGLを設定する問題を抱えています。ロードのOpenGL> 1.1の機能のWindows

私がやろうとしているのは、glBindBufferglBufferDataのような新しいOpenGL> 1.1の関数を読み込むことです。私はそれがwglGetProcAddressを使用して関数へのポインタを取得することも可能だということを読みました。返されたポインタは常にnullで、この機能を使用する場合は、新しい機能を除いて完全にGetProcAddress(OpenGL32DLL, "...")作業を使用して、DLL内のすべての元の機能がロードしていないようです。

私はここで誰を望んでいる私のセットアップを行って、私が間違っていたり、私が何かを見逃している場合は何をしたかを指摘することができます。

は、だからここに私達は行く:

  • 私は完全に が使用するのに十分か、負荷glBindBuffer以上とglBufferDataであるべきであるOpenGLの2.1件までを実行することができるよ指摘OpenGLの拡張機能ビューア4.4をダウンロードしています。

  • 私は、gl/glu.hgl/gl.hというヘッダーを含むMicrosoft SDK/v7.1をダウンロードしました。私はまた、hereからGLEXTの拡張API をダウンロードして、ヘッダを含めglext.lib +をリンク。リンカで

  • ファイル:

C:\プログラムファイル\マイクロソフトのSDK \ Windowsの\のV7.1のLib \ \ OpenGL32.Lib

C:\プログラムファイル\マイクロソフトLib \ GlU32.Lib \ SDKの\ WINDOWS \ V7.1では

C:\ Users \ユーザーデスクトップ\ユーザー\ glext \ libに\ glext.lib

  • CPPファイルが含ま:

C:\プログラムファイル\マイクロソフトのSDK \ Windowsの\のV7.1の\を含める - > GL.h、GLU.h

C:\ユーザー\デスクトップ\ユーザーは\ glext \含める - > glcorearb.h、glext.h、wglext.h

+0

は、あなたが 'wglGetProcAddress'を呼び出す前に、OpenGLコンテキストを作成したことがありますか? – user815923

答えて

5

代わりに、すべてのこれらの詳細を自分で処理するので、私はあなただけ自分ですべて処理しGLEW(http://glew.sourceforge.net/)のコピーをつかむ提案あなたのためにこれを標準的な方法で行います。私は現在、問題なく、いくつか発表された製品の上にそれを使用しています。 - 詳細については、マニュアルを参照してください

if (GL_ARB_multi_bind) { 
    //glBindBuffer is available. 
} 

(もちろん、おそらくglewExperimental = TRUE;glewInit()に呼び出し、後:あなたの例では

は、次の操作を実行することができると思います。)

+0

こんにちは、ご意見ありがとうございます。私はglewライブラリについて認識していますが、これは大規模なプロジェクトのほんの一部であり、できる限り軽量にしたいと思っています。 – MircoProgram

+0

@MircoProgram正直なところ、ヘッダーのみのソリューションなので、パフォーマンス、コンパイル時間、バイナリサイズの点ではあまり影響を受けません。あなたは物事を正しくやっていることを保証し、機能を追加するのは簡単です。 –

+0

@MikeWeir:GLEWは「ヘッダーのみの」ライブラリではありません。さて、GLEWは重量の重いコンポーネントではありません。そのため、GLEWは、それを使用するのではなく、別のロードライブラリを使用する正当な理由はありません。 –

0

私は問題は、現在のコンテキストがないと思うwglGetProcAddressを呼び出している。

関数ポインタは、tgeコンテキスト作成プロシージャによって決定される、正確なピクセル形式に固有のものです。

1

この関数を使用すると、返されるポインタは常にNULLになります。GetProcAddress(OpenGL32DLL、 "...")を使用するdllの元の関数はすべて、新しい関数が読み込まれないように見えます。

有効なOpenGLコンテキストが作成され、呼び出し元スレッドで最新の状態になっていますか? Windows拡張機能では、技術的にコンテキストごとに、つまり、作成する各OpenGLコンテキストの関数へのポインタを取得し、適切なコンテキストで適切な関数ポインタを使用するようにする必要があります。

これはもちろん、OpenGLコンテキストが必要であることを意味します。 WindowsでのOpenGLコンテキストを設定するための通常の順序は次のとおりです。

擬似コード

struct glctx { 
    HGLRC rc 
    // dictionary for explanation purposes 
    // one would normally just have a bunch of 
    // structure elements here 
    functionpointer[string:name] extensionfunction 
} 

if not window_with_desired_pixelformat_exists: { 
    wnd := create_a_window 
    pixelformat := select_pixelformat 
    wnd→set_pixelformat pixelformat 
} 
dc := wnd→getDC 

glctx ctx 
ctx→rc := wglCreateContext(dc) 
wglMakeCurrent(dc, ctx→rc); 

foreach(fname in extensionfunctions_names): { 
    ctx→extensionfunction[name] = wglGetProcAddress(name) 
} 
関連する問題