1

サードパーティのDLLを使用して生の画像データをロードしています。この生の画像データをopenGLのテクスチャとして使用したいと思います。ただし、c関数はvoid *を返すため、これを何らかの方法で変換して、「pixels」パラメーターとしてglTexImage2Dとして機能するようにする必要があります。今のところ、私のコードは次のようになっています。

data = c_void_p(vdll.vlImageGetData()) 
glTexImage2D(GL_TEXTURE_2D, 1, GL_RGB8, 1024, 1024, 0, GL_RGB, GL_UNSIGNED_BYTE, data )

ただし、データを「ポインタに変換できない」というTypeErrorが発生します。誰かがこれを機能させる方法を知っていますか?

編集:それを理解しました。基本的に私がしていることはこれです:

data = create_string_buffer( BUFFER_SIZE )
data = dll.vlImageGetData()
glTexImage2D(GL_TEXTURE_2D, 1, GL_RGB8, 1024, 1024, 0, GL_RGB, GL_UNSIGNED_BYTE, data )
4

2 に答える 2

1

を使用することを提案した同様の質問への回答ctypes.cast()

于 2009-05-12T08:00:35.533 に答える
0

これは役立つ場合と役に立たない場合があります。リターンタイプとしてのc_void_pの使用にも同様の問題があります。代わりに、c_longlongを返し、いくつかの厄介なトリックを実行する必要があります。

ポインタc_typesobejctを返す場合、返す整数値を取得するには、POINTERへの参照をc_longlongにキャストする必要があります。(CFUNCTYPEはPOINTER(x)タイプを戻りタイプとして受け入れないことに注意してください):

retvalp = cast(byref(retval)、POINTER(c_longlong))#retvalは、戻り値retvalp.contents.valueを返したいものです。

于 2012-11-29T05:04:26.233 に答える