2

UbuntuNattyでPyOpenGL3を使用しています。

glDrawElementsBaseVertexこの機能を使いたい。

私はそれが私のglxinfo出力にリストされているのを見ることができるので、私のカードがそれを持っていることを知っています。

しかし、実際に呼び出す方法がわかりません。私がそれを使おうとするとimport OpenGL.GL私が得るとき。NameError(それとは異なりNoneます)。

4

2 に答える 2

5

拡張名を使用して関数をインポートしてみてください。

>>> from OpenGL.GL.ARB.draw_elements_base_vertex import *
>>> glDrawElementsBaseVertex
<OpenGL.platform.baseplatform.glDrawElementsBaseVertex object at 0x031D7B30>
于 2011-06-21T11:07:51.843 に答える
1

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)

最初の要素が文字列の場合は、代替オブジェクトの名前として使用されます。それ以外の場合、名前は最初の引数から取得されます。

于 2011-06-21T11:01:51.910 に答える