Androidでテクスチャ圧縮を使用する方法に関する情報(または例)を見つけるための手助けが必要です。現在、PNGがたくさんあるので、使用するメモリの量を減らす必要があります。 PVR圧縮を見ていましたが、OpenGL内でこれを使用する方法がわかりません。
正しい方向を教えてくれる人もいれば、何も見つからないのでいくつか例を挙げてくれる人もいます。
Androidでは、主に4つのテクスチャ圧縮タイプがサポートされています。
つまり、テクスチャにアルファがない場合は、ETC1を使用できます。それらにアルファがあり、すべてのデバイスをサポートする場合は、他の3つのタイプでテクスチャを圧縮し、デバイスに応じてそれらをロードする必要があります。
使い方:
Pngファイルを圧縮します( ETC-Pack 、 PVRTexTool 、 ATI Compressonator 、 Nvidia Texure Tools などのツールを使用できます=テクスチャのタイプに応じて)、プロジェクトアセットに追加します。
ETC1を使用していない場合、デバイスで利用可能な拡張機能を決定します。
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
String s = gl.glGetString(GL10.GL_EXTENSIONS);
if (s.contains("GL_IMG_texture_compression_pvrtc")){
//Use PVR compressed textures
}else if (s.contains("GL_AMD_compressed_ATC_texture") ||
s.contains("GL_ATI_texture_compression_atitc")){
//Load ATI Textures
}else if (s.contains("GL_OES_texture_compression_S3TC") ||
s.contains("GL_EXT_texture_compression_s3tc")){
//Use DTX Textures
}else{
//Handle no texture compression founded.
}
}
生データとして圧縮テクスチャをロードします。
GlTexImage2Dの代わりにglCompressedTexImage2Dを使用します。
public void onDrawFrame(GL10 gl) {
....
gl.glCompressedTexImage2D(GL10.GL_TEXTURE_2D, level, internalformat, width,
height, border, imageSize, data);
}
これはolスレッドであるため、 http://devtools.ericsson.com/etc で利用可能な情報で更新すると思った。
AndroidではPVR圧縮のみを使用しないでください。すべてのモデルで機能するわけではありません。これを回避するには、ETC1(すべてのGLES 2.0デバイスで必須)のみを使用するか、GPUモードごとに個別のテクスチャパックを使用する必要があります。 Android dev guide には、圧縮形式をロードするヘルパークラスがあります。
etcpack を使用して圧縮を行うことができます。
ETC1ではアルファチャンネルを取得できないことに注意してください。アルファチャンネルを別のテクスチャとして使用することで、いくつかの派手なフラグメントシェーディングトリックを実行して、それを回避できます。
Etc1がすべてのAndroidデバイスでサポートされていないことを指摘したかったのですが、 gergonzalez
注意:ETC1形式は、ほとんどのAndroidデバイスでサポートされていますが、利用可能であるとは限りません。デバイスでETC1形式がサポートされているかどうかを確認するには、ETC1Util.isETC1Supported()メソッドを呼び出します.
https://developer.Android.com/guide/topics/graphics/opengl.html#textures