質問

JavaからCにコードを移動しようとしていますが、Cでintの配列を取得してOpenGL用のビットマップを作成できる関数を見つけようとしているときに問題が発生しました。 Javaでは、

を使用しました

bitmap = Bitmap.createBitmap({int array name}、w、h、Config.RGB_565);

Cで使用できる同様の関数、または使用できる回避策はありますか?

また、重要な場合は、Android向けにプログラミングしています。

ありがとう!

役に立ちましたか?

解決

私は特にアンドロイドに精通していませんが、OpenGL Cバインディングで適切に記憶している場合、ビットマップ構造はありません。代わりに、さまざまなビットマップ関数(つまり、 glBindTexture())は、GLuintポインター(配列に相当するC)を取得します。

Javaではすべてがクラスであるため、ビットマップにはそれに関連付けられたクラスがありますが、ビットマップクラスはほとんどの場合、実際に画像を含むint配列の単なるラッパー(およびいくつかの関数)です。

特にOpenGLでは、配列を glBindTextureでバインドすることがよくあります。 関数、および他のテクスチャ関数は、OpenGLの正しい「状態」を参照するためにバインドされた名前を取ります。

一方、このプロセスを短絡しようとしている場合は、常に glTexImage2D

他のヒント

少し前にBMP形式のドキュメントを調べて、このPythonを作成しました実装。これをほとんど問題なくCに移植できるはずです。

探している関数は、単に glTextImage2Dです。 () 。配列からOpenGLにデータをアップロードします。必要なソースと宛先の形式を指定すると、残りの処理が行われます。

glBindTexture()と併用するを使用して、保存された再利用可能なテクスチャオブジェクトを作成します。したがって、すべてのフレームを使用する前にテクスチャデータをアップロードする必要はありません。

必要なものは次のとおりです。

glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA , x_size, y_size, 0, GL_RGBA , GL_UNSIGNED_BYTE, (GLvoid *)your_data );

x_sizeとy_sizeは2の累乗でなければなりません。このコードでは、x_size y_size 4バイトint(またはx_size y_size * 4バイト)の配列が必要です。テストするには、次を試してください:

unsigned char data[32*32*4];

for( int i=0; i< sizeof(data); ++i) data[i]=rand();
// Don't forget to #include <stdlib.h>

glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA , 32, 32, 0, GL_RGBA , GL_UNSIGNED_BYTE, (GLvoid *)data );

その他の可能な形式:GL_BGRA(異なるバイト順)、GL_RGB(アルファがない場合)。 glGenTextures / glBindTextureを使用して、後で使用するためにテクスチャ設定を記憶します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top