2009-05-12 7 views
1

私はサードパーティのDLLを使っていくつかの生画像データを読み込んでいますが、この生画像データをOpenGLのテクスチャとして使用したいと思います。しかし、c関数はvoid *を返し、何とかこれを変換してglTexImage2Dの "pixels"パラメータとして機能させる必要があります。今、私のコードは次のようなものです:gltexImage2Dへの入力としてctypes.c_void_pを使用していますか?

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

しかし、私は、データが 'ポインタに変換できません'という不満を受けます。誰もこれを動作させる方法を知っていますか?

編集:それを考え出してください。基本的に私がやっていることはこれです:

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) 

答えて

1

answersimilar questionにはctypes.cast()を使用することを示唆しました。

+0

これは機能しません。なぜなら、pyopenGLは、ピクセルparamが生の文字列であることを期待しているからです。私はc_char_pを使用することはできません。なぜなら、それはヌルで終了する文字列を必要とするからです。そのvoidポインタを生のpython文字列に変換する方法が必要です。 – aeflash

+1

http://osdir.com/ml/python.ctypes/2004-12/msg00002.htmlを見たことがありますか?はい、それが役に立たなかった場合は、ローカルで実行できる小さなスタンドアローンのスケッチを提供する必要があります。 –

0

これは役に立つかもしれません。戻り型としてc_void_pを使用する場合も同様の問題があります。代わりにc_longlongを返す必要があります。

ポインタを返す場合は、ポインタをc_longlongに戻して整数値を返す必要があります。 (CFUNCTYPEはPOINTER(x)の戻り値の型などの型を受け付けないことに注意してください):

retvalp =キャスト(ByRefの(のretval)、POINTER(c_longlong))#retvalは、私が リターンretvalp.contentsを返すようにしたいものです。値

関連する問題