AndroidNDK-r5 (4)

OpenGL ESのテクスチャ読み込みで苦戦中……。
メモ書きでもこうして書いてまとめていれば、考えがまとまるのではないかと思ったので
少し書いてみようと思う。


取り合えずAndroidNDKでTextureオブジェクトを作成しようと思った場合には
いくつかのステップを踏まなくてはいけない。

1. リソースファイルのパスを取得し、NDKに登録する
2. NDK内でTextureファイルを読み込む
3. glGenTextures で テクスチャオブジェクトの作成
4. glTexImage2D で バインドされているテクスチャオブジェクトに対して2D画像を割り当てる
5. 画像の繰り返しを好まない場合は、glTexParameterf、glTexParameteriの設定

と、こんなところ。
順番に実装方法を書いていくとこうなっていく。

1. リソースファイルのパスを取得し、NDKに登録する

この場合、問題なのはリソースファイルのパスが分からないこと。
また、assetsに配置した場合もfile://でアクセスできるのはJava内だけだと
思われるので利用できないこと。


まぁ、ここは単純なところで起動時にassets配下にあるファイルを
アプリから読み書き可能なローカル領域にコピーするということ。
そうすれば、後は以下の領域にNDKからアクセスすればよいはず。

"/data/data/" + this.getPackageName() + "/files/" + fileName

また、この際についでなのでwidthとheightの情報も取っておいた。

2. NDK内でTextureファイルを読み込む
3. glGenTextures で テクスチャオブジェクトの作成
4. glTexImage2D で バインドされているテクスチャオブジェクトに対して2D画像を割り当てる

で、詰まっているのはここから。
3. は簡単に終わる。以下関数を実行するだけ。

(GLsizei n , GLuint * textures);
 テクスチャオブジェクトの作成
 第1引数で指定した数分のユニークなID値がtexturesに格納される

問題は、2と4となります。
今回はテクスチャとしてpngファイルを使うんだけど、glTexImage2Dに登録するには
このデータを『OpenGLがサポートするピクセルフォーマット及び画素の並び方にする』
必要がある。


何それ、といわざるを得ない。


Objective-CJavaのサンプルなら結構見つかるんだけどな。
C、C++でのOpenGL ESサンプルがいまひとつ。
うーん。そろそろ限界なのか。本買わないとダメかなぁ。