JOGLテクスチャの問題を解決。

自宅ノートPCでの不明なエラーはグラフィックドライバーを更新したら直った。
おそらくOpenGLの対応バージョンの問題だろう。

これで、残る問題は、BufferedImageから直接テクスチャを生成する問題だけである。
ImageIOを使ってPNGのデータをbyte配列に出力して、そこからテクスチャを生成する、
というのがもっとも簡単だ。

ただ、512x512のテクスチャ生成に、1.2秒くらいかかる。
初回に15枚ほどフォントテクスチャを生成するので、約20秒も起動にかかってしまう。
遊ぶ人も嫌だろうが、この先デバッグしつつ開発するのに、毎回20秒待つのは嫌である。

ここを何とか改善する必要がある。

まず、考え付くのは、手動で画像をエンコードすること。
JOGLが対応しているフォーマットは、gif,png,jpeg,tga,sgiくらいだ。
この中で、tga,sgiというのは、知らないフォーマット。
gif,jpegは透過に問題があるし、pngか、tga,sgiという選択肢しかない。

しかし、実際使ってみると、tga,sgiは両方ともgifと同じで、透過が0/1の2値しか対応してない。

つまり、選択肢は png しかなくなったわけだが、自分でPNGエンコードを今更作るのは面倒だ。
しかし、ImageIOがある今、ネットで、PNGエンコーダを作っている人はいるのだろうか…?

いた(笑)

http://catcode.com/pngencoder/

ここからエンコーダクラスをダウンロードできる。
使い方も簡単で、

PngEncoderB pe = new PngEncoderB(BufferedImage img);
byte[] b = pe.pngEncode(bool useAlpha);

これだけで、バイトデータが取得できる。

ただし!
PngEncoderB.javaにはバグがあり、ダウンロードしただけでは、透過は使えない。
166行目に、以下を追加しよう。

this.encodeAlpha = encodeAlpha;

これで、かなり高速にテクスチャが生成できるようになった。
[PR]
by miries | 2011-10-11 18:10 | ゲームを作る


<< 2回目のメジャーアップデート ... JOGLアプレットが動いたー!! >>