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-CやJavaのサンプルなら結構見つかるんだけどな。
C、C++でのOpenGL ESサンプルがいまひとつ。
うーん。そろそろ限界なのか。本買わないとダメかなぁ。