3

GLSurfaceView通常のAndroidレイアウトに埋め込まれたゲームを実行しています。アプリがしばらく実行され、多くのテクスチャが作成されてから削除された後(表示されているすべてのテキストは動的にテクスチャにレンダリングされ、使用されていない場合は再度削除されます)、他のレイアウト要素のテクスチャはテクスチャを失います。

たとえば、テキストビューやボタンはテキストテクスチャを失います。ボタンのテキストがめちゃくちゃ

これは、レイアウトがOpenGLESレンダラーによってレンダリングされる3を超えるすべてのAndroidバージョンの問題のようです。

ゲームテクスチャのどれも失われることはありません。ビューテクスチャのみ。

とは同期されglGenTexturesglDeleteTexturesいるため、問題にはなりません。

通常のAndroidビューとOpenGLを混在させるときに注意しなければならないことが他にありますか?

4

3 に答える 3

1

わかりました、私は自分に何が悪いのかを見つけました。mTextureManager.deleteAllTextures()フラグメントを呼び出して、UIスレッドのテクスチャを削除していましたonPause();

テクスチャを削除して解決しました

mSurfaceView.queueEvent(new Runnable(){
    //delete all textures here
}

これが他の人に役立つことを願っています...

于 2013-03-28T17:05:56.097 に答える
1

とにかく、サーフェスビューにキューに入れられたすべてのテクスチャ処理を行っていたので、それが原因ではありませんでした(CFlexが指摘したように)。

最終的には次のようになりました。レンダラーのコンストラクターでいくつかのglメソッドを呼び出していました。ただし、レンダラーは初期化以降、サーフェスビューに渡される必要があるため、コンテキストが作成される前はコンストラクターです。そのため、gl呼び出しはレイアウトコンテキストを台無しにしているように見えました。

おかしなことに、ほとんどのデバイスは気にしないようでした(テクスチャを失うという説明された動作を除いて)。ただし、lg p990は起動時に「コンテキストが作成されていません」という例外でクラッシュし、それが最終的な手がかりを与えました。レンダラーコンストラクターではなくglの初期化を行った後、後で効果がなくなりました。

そしてお願いします。問題の重要な半分に対処しているため、CFlexの回答に投票してください。

于 2013-05-03T10:20:37.790 に答える
0

私も同じ問題を抱えていました。次の行は私がこれを解決するのを助けました。

<application android:hardwareAccelerated="false" ...>

私がテストしたすべてのデバイスでどのような問題が発生したのか疑問に思います。

于 2013-11-23T18:27:17.633 に答える