AndroidNDK-r5 (テクスチャ貼り付け)

なんか(6)とかよりサブタイトルがないと分かり辛いですね。
とりあえずテクスチャの表示までが完了しました。
表示に使えるのはPNG画像だけですが……。

色々と関数が長くなったり短くなったり迷走しましたが
最終的にテクスチャ読み込みの関数はかなり短めに実装できました。
これも先日紹介したライブラリのおかげです。

#include <GLES/gl.h>
#include <GLES/glext.h>
#include "yspng.h"

YsRawPngDecoder mPng;

//画像ファイルからテクスチャを作成します
GLuint loadTexture(const char* fileName){
mPng.Decode(fileName);
GLuint texture;

//OpenGL用のテクスチャを生成します
// 第1引数で指定した数分のユニークなID値が格納される
glGenTextures(1, &texture);
// 作成したテクスチャオブジェクトを有効化する
// はじめて使用されたIDは自動的にテクスチャオブジェクトが作られる
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mPng.wid, mPng.hei, 0, GL_RGBA, GL_UNSIGNED_BYTE, mPng.rgba);

//作成したテクスチャを返します
return texture;
}


実装するのに一週間近くかかったコードを公開するのも何だよなとは
多少なり思いますが、まぁ情報の共有と覚え書きです。


ここに先日までに紹介してるように、/data/data/<パッケージ名>/files/xxx.png
ファイル名を渡してやることでテクスチャの生成が完了します。
後はこの番号を元にテクスチャをバインドしてやるだけですね。 解放もお忘れなく。


glTexParameter(i|f)は、確かテクスチャの繰り返しに関する関数です。
この辺りについての解説は適当にググってください。不親切なblogです。


実際にやってみるとこうなります、という画面は
ちょっと出すと問題になるので出しませんけどね!
Textureの描画関数に関しては特に解説要りませんよね。 この辺はiPhoneのESサンプルとかを
そのまま流用できると思います。 gl○○○って関数はそのまま使えますので。