6

マルチテクスチャリングを使用したい新しいプロジェクトを開始しました。以前にマルチテクスチャリングを行ったことがあり、OpenGL のバージョンでサポートされています。

ヘッダーには次のものがあります。

GLuint  m_TerrainTexture[3];//heightmap, texture map and detail map
GLuint  m_SkyboxTexture[5]; //left, front, right, back and top textures

PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
PFNGLACTIVETEXTUREARBPROC   glActiveTexture;

コンストラクターには次のものがあります。

glActiveTexture = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress((LPCSTR)"glActiveTextureARB");
glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) wglGetProcAddress((LPCSTR)"glMultiTexCoord2fARB");

if(!glActiveTexture || !glMultiTexCoord2fARB)
{
    MessageBox(NULL, "multitexturing failed", "OGL_D3D Error", MB_OK);
}

glActiveTexture( GL_TEXTURE0_ARB );
...

これは、「マルチテクスチャリングに失敗しました」というメッセージ ボックスを示し、glActiveTexture の内容は 0x00000000 です。

glActiveTexture( GL_TEXTURE0_ARB ) になったとき; アクセス違反エラーが発生する

私は MVC ダイアグラムを実装しているので、これはすべて地形ビュー クラスにあります。

4

4 に答える 4

1

GLEE は死んだライブラリです。長い間更新されていません。

GLEW は優れた拡張機能ローディング ライブラリですが、コア 3.2 以降での動作には問題があります。

GL3Wをお勧めします。その優れた点は、自己更新であることです。ヘッダーをダウンロードして解析します。欠点は、ローダーを生成するために Python 2.6 のインストールが必要なことです。しかし、それ以外の場合はかなり良い結果が得られます。

于 2011-06-12T05:31:44.430 に答える
1

次のように、コードを引用して拡張機能をロードしました。

PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
PFNGLACTIVETEXTUREARBPROC   glActiveTexture;

glActiveTexture = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress((LPCSTR)"glActiveTextureARB");
glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) wglGetProcAddress((LPCSTR)"glMultiTexCoord2fARB");

これは、既存のシンボルを再定義する可能性があるため、非常に問題があります。(動的) リンカは最終的にこれにつまずきます。たとえば、ポインタ変数 glActiveTexture への代入がどこかで行われる場合がありますが、同じ名前の関数が呼び出されるたびに、別の場所からリンクされた何かが呼び出されます。

C では通常、コードの大部分を調整することなく、プリプロセッサ マクロとカスタム プレフィックスを組み合わせてこの問題を回避します。

PFNGLMULTITEXCOORD2FARBPROC myglMultiTexCoord2fARB;
#define glMultiTexCoord2fARB myglMultiTexCoord2fARB

PFNGLACTIVETEXTUREARBPROC   myglActiveTexture;
#define glActiveTexture myglActiveTexture

glActiveTexture = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress((LPCSTR)"glActiveTextureARB");
glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) wglGetProcAddress((LPCSTR)"glMultiTexCoord2fARB");

有効なレンダー コンテキストがアクティブで、拡張機能がサポートされている場合に失敗する理由が他にあるとは本当に思いません。

于 2011-04-29T06:54:27.277 に答える
0

拡張機能の管理にはGLEW / GLEEをお勧めします。

于 2011-04-27T20:31:52.040 に答える
0

Rastertek チュートリアルには、wglGetProcAddress を機能させるために必要な完全なセットアップが含まれています。GLEW も私にはうまくいきません。考えられることはすべて試し、多くの人に尋ねましたが、VS 2012 ではうまくいきません。シェーダー。

于 2014-02-06T16:26:45.270 に答える