0

私はこの Samsung Galaxy ACE GT-S5830 Android フォンを持っています。Adreno-200 GPU を搭載しています。

ETC (Ericsson Compression format) のサポートがあることを期待していましたが、読み込めないようです。

gl.glGetString(GL10.GL_EXTENSIONS) 関数には GL_OES_compressed_ETC1_RGB8_texture 拡張が含まれていますが。

しかし、android.opengl.ETC1Util.isETC1Supported() は false を返します??? これはとても奇妙です。

ファイルを .pkm 形式に変換しました。これがテクスチャをロードする方法ですが、テクスチャがロードされていないことを示す白い画面しか表示されません。:

InputStream is= _context.getAssets().open("etc/hands_tex.pkm");                     
gl.glActiveTexture(GL10.GL_TEXTURE0);   //texture unit to load texture to.
gl.glBindTexture(GL10.GL_TEXTURE_2D, glTextureId);
try {
    ETC1Texture etc1tex = ETC1Util.createTexture(is);               
    ByteBuffer bb = etc1tex.getData();              
    gl.glCompressedTexImage2D(GL10.GL_TEXTURE_2D, level, ETC1.ETC1_RGB8_OES, etc1tex.getWidth(), etc1tex.getHeight(), 0, bb.capacity(), bb);                
} catch (IOException e) {
   e.printStackTrace();
}

上記の ETC1Util.createTexture() への呼び出しが機能し、メモリ内にテクスチャ オブジェクトを作成しても。

4

1 に答える 1

1

私はJavaGLを使用したことがありませんが、ETC1圧縮を使用するAndroid用のネイティブOpenGLコードを記述したので、うまくいけば助けてくれます。ETC1はAndroidの一般的なテクスチャ圧縮形式であり、拡張機能が存在することは、デバイスがそれをサポートしていることを示しています。:)

ここには、試して解決する必要のある不明な点がいくつかあります。

ETC1パーツではなく、テクスチャの読み込みと表示コードに問題がある可能性があります。したがって、ETC1をスワップアウトし、32ビットなどの非圧縮の安全な形式を使用して正しく表示されることを確認する必要があります。

次に、単純な32x32 ETC1テクスチャを使用して、影響のある非正方形のNPOTサイズを削除してみてください。glCompressedTexImage2D呼び出しにハードコードされた値を使用します。

gl.glCompressedTexImage2D(GL10.GL_TEXTURE_2D, level, ETC1.ETC1_RGB8_OES, 32, 32, 0, 512, bb);

もちろん、NULLが有効なパラメーターである場合は、bbが有効であることを確認してください。glCompressedTexImage2Dからの戻りコードも非常に役立ちます。

すでにこれを試したことがある場合は、お詫び申し上げます。いくつかの使用を願っています、アンディ

于 2012-07-12T19:38:27.007 に答える