0

シーンをレンダリングする GLSurfaceView があります。実際のテクスチャの代わりに白い四角がある一部のテクスチャを除いて、シーンは正しく表示されます。2 種類のテクスチャを使用します。

  • 一部のテクスチャはプロジェクトのリソースにあります。私はそれらを で作成しますonSurfaceCreated。すべてが正常に動作します
  • 他のいくつかは、リモートの場所からダウンロードする必要があります。これらは、正しく表示されないテクスチャです。

次のコードで「遅延テクスチャ」をダウンロードして作成します。

public void onDrawFrame(GL10 gl) {
    ...
    Texture3D.getDynamicTexture(gl, object.avatar).bind(gl);
    ...
}


public static Texture3D getDynamicTexture(GL10 gl, int key) {
    Texture3D texture =  dynamicTextures.get(key);

    if (texture == null) {
        dynamicTextures.put(key, new Texture3D(gl, key, Type.DYNAMIC));
        texture = getStaticTexture(R.drawable.broken_img);
    }

    return texture;
}


public Texture3D(final GL10 gl, final int id, Type type) {
    gl.glEnable(GL10.GL_TEXTURE_2D);

    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
    texture = newTextureID(gl);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, texture);
    gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
    gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
    gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

    Utils.loadImage(id, new SimpleImageLoadingListener() {

        @Override
        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            _pBitmap = loadedImage;
            GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, _pBitmap, 0);

            _pBitmap = null;
            gl.glEnable(GL10.GL_BLEND);
        }

    });

R.drawable.broken_img が白い正方形に置き換えられたため、ダウンロードが機能していることがわかります。テクスチャが表示されているように見えますが、それらはすべて 1 行で画面の上に積み上げられています (写真を参照)。

画面の上に重ねられたテクスチャ

Android OpenGL ES 1.1 ホワイト ボックス テクスチャも試してみましたが、どちらもうまくいきませんでした。私が見た唯一の違いは、テクスチャが画面の上に表示されなくなったことです。

4

1 に答える 1

0

2 つのブール値フラグ (imageLoaded、textureCreated) を追加して、この問題を解決しました。これらのフラグを使用すると、最初に画像をダウンロードし、画像を取得したらすぐにテクスチャを作成できます (テクスチャを作成するすべてのコードが「同時に」実行されます)。

于 2013-04-09T09:13:44.093 に答える