2013-02-27 2 views
3

일반 Android 레이아웃에 포함 된 GLSurfaceView으로 실행되는 게임이 있습니다. 앱이 잠시 실행되고 많은 텍스처가 생성 된 다음 나중에 삭제되면 (표시된 모든 텍스트가 동적으로 텍스처로 렌더링되고 사용되지 않으면 다시 삭제됨) 다른 레이아웃 요소의 텍스처가 텍스처를 잃게됩니다.Android : GLSurfaceView에서 텍스처를 만들면 표준 하드웨어 가속보기 요소에서 텍스처가 삭제됩니다.

예를 들어 텍스트 뷰 또는 단추의 텍스트 텍스처가 손실됩니다. messed up button text

이것은 레이아웃이 OpenGL ES 렌더러에 의해 렌더링되는 모든 Android 버전> 3의 문제인 것으로 보입니다.

게임 텍스쳐가 전혀 손실되지 않습니다. 뷰 텍스처 만. 그 문제가 안되도록 glGenTexturesglDeleteTextures

가 .. 동기화

일반 안드로이드 뷰와 OpenGL을 혼합 할 때의주의해야 뭔가 다른 일이 있습니까?

+1

같은 문제가 있습니다. 답변을 찾았습니까? (하드웨어 가속을 비활성화하면 문제가 해결되는 것 같지만 좋은 방법은 아닙니다.)>> http://stackoverflow.com/questions/14531868/android-opengl-issue-weird – AMerle

+0

내 anwser를 확인하십시오. 문제가 해결되었습니다. 입력에 감사드립니다. –

답변

1

이후 어쨌든 surfaceview에 대기중인 모든 텍스처 처리를하고 있었는데 CFlex가 지적한 것처럼 그로 인해 발생할 수는 없습니다.

결국 다음과 같았습니다. 렌더러의 생성자에서 gl 메서드를 호출하고있었습니다. 그러나 렌더러가 보다 앞에있는 경우 초기화시 렌더러가 표면 뷰로 전달되어야하므로 컨텍스트가 만들어집니다. 따라서 gl 호출은 레이아웃 컨텍스트를 엉망으로 만드는 것처럼 보였습니다.

대부분의 장치는 (텍스쳐 손실의 설명 된 동작 이외에) 신경 쓰이는 것처럼 보이지 않았습니다. 그러나, lg p990은 "컨텍스트가 생성되지 않았습니다"예외로 시작될 때 충돌하고 최종 단서를주었습니다. 렌더러 생성자가 아닌 gl 초기화를 수행 한 후 나중에 효과가 사라졌습니다.

와 같이하십시오. CFlex의 대답은 문제의 중요한 부분 중 하나를 다루기 때문에 투표하십시오.

+0

gj, 그건 결국 컨텍스트 문제였습니다. – AMerle

1

좋아요. 나에게 잘못 된 것을 발견했습니다. 나는에 mTextureManager.deleteAllTextures()를 호출하여 UI 스레드에 텍스처를 삭제 한 내 조각의 onPause();

나는이 다른 사람을 도움이 될 것입니다

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

희망 내 텍스처를 삭제하여 그것을 해결 ...

+0

표면 뷰에서 텍스처 생성 및 텍스처 삭제를 대기 중입니다. 어쩌면 나는 어딘가에 전화를 놓치고있다. 렌더 호출 내에서 삭제하는 것이 좋습니다. –

+0

예 절대적으로 괜찮습니다. 다른 스레드에서 일부 텍스처를 삭제하지 않는 경우 찾아보십시오. – AMerle

0

동일한 문제가있었습니다. 다음 줄을 통해이 문제를 해결할 수있었습니다.

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

테스트 한 모든 장치에 어떤 문제가 있는지 궁금합니다.