UbuntuNattyでPyOpenGL3を使用しています。
glDrawElementsBaseVertex
この機能を使いたい。
私はそれが私のglxinfo出力にリストされているのを見ることができるので、私のカードがそれを持っていることを知っています。
しかし、実際に呼び出す方法がわかりません。私がそれを使おうとするとimport OpenGL.GL
私が得るとき。NameError
(それとは異なりNone
ます)。
UbuntuNattyでPyOpenGL3を使用しています。
glDrawElementsBaseVertex
この機能を使いたい。
私はそれが私のglxinfo出力にリストされているのを見ることができるので、私のカードがそれを持っていることを知っています。
しかし、実際に呼び出す方法がわかりません。私がそれを使おうとするとimport OpenGL.GL
私が得るとき。NameError
(それとは異なりNone
ます)。
拡張名を使用して関数をインポートしてみてください。
>>> from OpenGL.GL.ARB.draw_elements_base_vertex import *
>>> glDrawElementsBaseVertex
<OpenGL.platform.baseplatform.glDrawElementsBaseVertex object at 0x031D7B30>
OpenGL拡張機能は、バインディング自体によって提供される必要があります。PyOpenGLは、新しい拡張機能の「チェーンロード」をサポートしていません。そのような実装は可能でしたが、努力するだけの価値はありません。
たぶん、あなたは拡張機能に正しくアクセスしていません。PyOpenGLのドキュメントでは、これを行うにはいくつかの方法があると説明されています
http://pyopengl.sourceforge.net/documentation/opengl_diffs.html
拡張機能と条件付き機能PyOpenGLは、ほとんどのOpenGL拡張機能をサポートしています。拡張機能は、拡張機能の構築されたパッケージ名をインポートすることにより、「通常の」関数ポインタとして使用できます。次に例を示します。
from OpenGL.GL.ARB.vertex_buffer_object import * buffer = glGenBuffersARB(1)
拡張モジュールの初期化関数などを呼び出す必要はありません。必要に応じて、拡張機能の「init」関数を呼び出して、ローカルマシンが特定の拡張機能をサポートしているかどうかを示すブール値を取得できます。
if glInitVertexBufferObjectARB(): ...
ただし、通常は、使用するエントリポイントのブール値の真理をテストする方が明確です。
if (glGenBuffersARB): buffers = glGenBuffersARB( 1 )
多くの場合、同じAPIを実装するエントリポイントが多数あり、使用可能な実装を使用します(おそらく、いくつかの優先順位があります)。OpenGL.extensionsモジュールは、これをサポートする簡単なメカニズムを提供します。
from OpenGL.extensions import alternate glCreateProgram = alternate( 'glCreateProgram', glCreateProgram, glCreateProgramObjectARB) glCreateProgram = alternate( glCreateProgram, glCreateProgramObjectARB)
最初の要素が文字列の場合は、代替オブジェクトの名前として使用されます。それ以外の場合、名前は最初の引数から取得されます。