2009-03-24 22 views
4

OpenGLアプリケーションをWindowsに移行しようとしています。OpenGLアプリケーションをWindowsに移植する際の問題

WindowsにはまともなOpenGL実装がありました。しかし、私はそれがそうではないと考え始めています...

特に、私は配列バッファとglDrawArraysを使用します。私は(C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\glに含まれる)<GL\gl.h>を調べたところ

vertexbuffers.cpp(31) : error C3861: 'glGenBuffers': identifier not found 
vertexbuffers.cpp(32) : error C2065: 'GL_ARRAY_BUFFER' : undeclared identifier 
vertexbuffers.cpp(32) : error C3861: 'glBindBuffer': identifier not found 
vertexbuffers.cpp(33) : error C2065: 'GL_ARRAY_BUFFER' : undeclared identifier 
vertexbuffers.cpp(33) : error C2065: 'GL_STATIC_DRAW' : undeclared identifier 
vertexbuffers.cpp(33) : error C3861: 'glBufferData': identifier not found

、私が見た::私は、Visual Studio 2008 Proは、私のコードをコンパイルしようとしたとき

は、私は次のエラーを受け取った

/* ClientArrayType */ 
/*  GL_VERTEX_ARRAY */ 
/*  GL_NORMAL_ARRAY */ 
/*  GL_COLOR_ARRAY */ 

を更新してください。ただし、これらの定数は他の場所で定義されているようです。

これらの機能にアクセスできない場合、どのようにバッファを生成する必要がありますか?

ドキュメントでは、これらのアレイタイプが無効であるとは言いません。 Windows上のOpenGLでの実装にアクセスするにはどうすればよいですか?

+0

特定のエラーが発生しましたか?それらのコメントは文書化のためのものであり、物事は他の場所で適切に定義されている可能性があります。 –

+0

はい、私はそれらの機能で銃を飛ばしました。私の実際のエラーは、バッファ生成関数から来ます。混乱のために申し訳ありません、私は質問を編集しました。 –

+0

それらを投稿してくれてありがとう、私の答えを理解して修正するのに役立ちました。 :) – jheriko

答えて

5

#defineは、そうでなければ繰り返されるときはいつでも、ヘッダファイル内でコメントアウトされます。 gl.hのライン1054を見てください:

/* vertex_array */ 
#define GL_VERTEX_ARRAY     0x8074 

これに#defineは、実際に、あなたはおそらく、新鮮なコピーでファイルを置き換える必要が欠落している場合。

the documentation for glGenBuffersを見ると、OpenGL 1.5以降でしか使用できないことがわかります。 WindowsのヘッダーファイルにはOpenGL 1.2しか付属していないため、拡張機能を使用して新しい機能にアクセスする必要があります。関数名でwglGetProcAddressを呼び出した場合(例:

void (__stdcall *glGenBuffers)(GLsizei,GLuint*) = 
    wglGetProcAddress("glGenBuffers"); 

この場合、関数へのポインタがあります。

+0

あなたは私よりも目が良い。参考にしていただきありがとうございます。残念ながら、私はまだglBindBufferの周りを回転するエラーがあります。 –

+0

あなたが受け取ったエラーを見た後に編集されました。残念ながらヘッダーは1.2のみですが、簡単な修正があります。 :) – jheriko

2

バッファー機能はWindows上でのみ拡張メソッドとして使用できるようです。

OpenGLは、これらすべての機能へのポインタを宣言するglext.hを提供します。関数へのポインタを取得するには、wglGetProcAddressを使用するのは私のアプリまでです。例えば

PFNGLGENBUFFERSPROC myglBindBuffers = 
    (PFNGLGENBUFFERSPROC)wglGetProcAddress("glGenBuffersARB"); 

ありがたいことに、私は約4機能のためにそれをしなければなりません。残念ながら、私は今、アプリケーションにプラットフォーム依存のコードを追加する必要があります。

+0

+1これらの型定義を見つけるための賢明な方法 - ありがとう! –

8

あなたはGLEW打撃を与える可能性があります

http://glew.sourceforge.net/

私は、過去のある時点でそれを使用して、少し簡単に、よりポータブルこの種のものになりますかなり確信しています。

+0

すばらしいリンク、ありがとうございました。 –

1

MicrosoftのOpenGLストレッチは、Windows XP、OpenGL-1までのOpenGL-1.1までしかサポートされていません。4はVistaから始まります。それを超えるOpenGLの機能は、インストール可能なクライアントドライバ(ICD)、すなわちGPUドライバのOpenGLのimplmenentationによって提供され、サポートされなければならない。高度な機能にアクセスするには、OpenGLは種類のDLLののGetProcAddress似ているwglGetProcAddressによって形成されたいわゆる拡張システムは、提供するが、OpenGLの実装(=ドライバ)の機能へのアクセスを与えます。

物事を容易にするために、GLEWのような素敵なラッパー・ライブラリーは、それらをエンドユーザーに提供し、利用可能なすべてのOpenGL拡張を初期化し、すべての単調でつらい仕事をされ、開発されています。

関連する問題