2011-01-28 4 views
1

のみ、黒い画面が表示さホームボタンを押して、アプリケーションに戻ります。黒い画面しか見ることができません.GLSurfaceViewとRelativeLayoutは表示されません。約2分前のシステムの後GLSurfaceView onPauseは、私はそれがこのレイアウトで構成されます、少しOpenGLの活動を開発しています

は言う: enter image description here

、私は非常にイライラしています、私はGLSurface onPause()とonResume()私の活動は、対応するメソッドを呼び出したときに呼び出します。

誰かが私を助けることができます!???? ???? ????

私は私のコードの一部をポスト:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    Log.d(TAG,"onCreate()"); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.virtualtour); 
     loading_ly = (RelativeLayout) findViewById(R.id.vt_layout_loading); 
     panorama_description = (TextView) findViewById(R.id.vt_description); 
     virtualtour_relatively = (RelativeLayout) findViewById(R.id.vt_layout_opengl); 
     vt_handler = new VirtualTourHandler(this); 
     ext_container = new GLExtensionContainer(); 
     th_checkGL = new ThreadCheckOpenGL(ext_container, extensions_requested,vt_handler); 
     th_checkGL.start(); 
     mFacebook = new Facebook(ArounderTouchMainActivity.APP_ID); 
     mAsyncRunner = new AsyncFacebookRunner(mFacebook); 
     msg = vt_handler.obtainMessage(); 
     output_thread = msg.getData(); 
     output_thread.putInt(VirtualTour.TYPE_TAG, VirtualTour.START_TAG); 
     vt_handler.handleMessage(msg); 
     } 

これは私のハンドラの内部クラスです(ユーザーが何らかのアクションを実行するとき、私はスイッチテクスチャのためにそれを使用)

@Override 
     public void handleMessage(Message msg) { 


      bd = msg.getData(); 
      type = bd.getInt(TYPE_TAG); 
      bd = msg.getData(); 

      switch (type) { 
       case GL_EXTENSIONS_CHECK_TAG: 
        showDialog(GL_EXTENSIONS_CHECK_DIALOG); 
        break; 
       case START_TAG: 
        Log.d(TAG, "START_TAG"); 
        loading_ly.setVisibility(View.VISIBLE); 
        virtualtour_relatively.setVisibility(View.GONE); 
        progress_bar.setProgress(0); 
        thread = new DownloadImageProgressBar(vt_handler,getActivity()); 
        thread.execute(panorama_input.get(position).getUrl_virtual()); 
        break; 
       case BAR_TAG: 
        progress = bd.getInt(PROGRESS_TAG); 
        if(progress <= 100) 
         progress_bar.setProgress(progress); 
        break; 

       case SHUTDOWN_TAG: 
        finish(); 
        break; 
       case SHOW_TAG: 
       Log.d(TAG, "SHOW_TAG"); 
       if(first_visualization){ 
        glSurface = (GLSurfaceView) findViewById(R.id.surface_vt); 
        glSurface.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR); 
        renderer = new OpenGLRenderer(first_data,second_data,sphere,vt_handler,ext_container, ((panorama_input.get(position)).getType().compareTo(CardImage.SPHERE) == 0)); 
        glSurface.setRenderer(renderer); 
        first_visualization = false; 
       } 
       // potrebbe essere fatto molto meglio: ricorda! 
       panorama_description.setText(panorama_input.get(position).getTitolo()); 
       loading_ly.setVisibility(View.GONE); 
       virtualtour_relatively.setVisibility(View.VISIBLE); 

       renderer.setImage(first_data, second_data,((panorama_input.get(position)).getType().compareTo(CardImage.SPHERE) == 0)); 
       renderer.resetZoom(); 
       renderer.resetAngle(); 
       renderer.startTimer(); 
       enable_touch = false; 
       case NOCONNECTION_ERROR_TAG: 
        showDialog(OUTOFMEMORY_ERROR_DIALOG); 
        break; 

       case OUTOFMEMORY_ERROR_TAG: 
        showDialog(OUTOFMEMORY_ERROR_DIALOG); 
        break; 


       default: 
        break; 
      } 
      return; 

     } 


    } 

DownloadImageProgressBarがどのAsyncTaskですWebからイメージをダウンロードし、アクティビティハンドラを介していくつかのUIアクションを実行します。

私のonPauseおよびonResumeの方法があります。

@Override 
protected void onResume() { 
    Log.d(TAG,"onResume()"); 
    super.onResume(); 
    if(glSurface != null) 
     glSurface.onResume(); 
} 

    @Override 
protected void onPause() { 
    Log.d(TAG,"onPause()"); 
    super.onPause(); 
    glSurface.onPause(); 
} 

は私がonSurfaceChangedとonSurfaceCreatedでこのメソッドを呼び出す:

public void setGLTexture(GL10 gl10) { 

     GL11 gl = (GL11) gl10; 

     //Generate one texture pointer... 
     gl.glGenTextures(2, textures_id); 
     gl.glClearColor(0.2f, 0.2f, 0.2f, 1.0f); 
     //...and bind it to our array 
     gl.glBindTexture(GL10.GL_TEXTURE_2D, textures_id.get(0)); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); 
     GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, first, 0); 
     gl.glBindTexture(GL10.GL_TEXTURE_2D, textures_id.get(1)); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); 
     GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, second, 0); 
     return; 
    } 

私は別の質問、バックグラウンドでの私の活動のスイッチテクスチャ画像Iを持っています前にダウンロードしたファイルは削除されますか

これは問題の可能性がありますか?

+0

アクティビティの再開時に何をしているのか理解できるように、いくつかの(抽象化された)コードを投稿できますか? –

答えて

5

「ホーム」を押すと、GLコンテキストが失われます。

Androidのドキュメントから:

EGL レンダリングコンテキストが失われる状況があります。この は通常、デバイスがスリープ状態になった後に を起動すると発生します。 EGL コンテキストが失われた場合、 (コンテキストなど)に関連付けられたすべてのOpenGLリソース は、そのコンテキストで が自動的に削除されます。 が正しくレンダリングされるようにするには、レンダラー がまだ必要なリソースを再作成する必要があります( )。 onSurfaceCreated(GL10、EGLConfig) メソッドは、 thisを実行するのに便利な場所です。

hereについて読むことができます。

問題を解決するには、レンダラーのonSurfaceChangedですべてのOpenGLテクスチャと初期化を実行します。

+0

しかし、なぜ私は何も見ませんでした...?あなたが正しい場合、私はGLSurfaceViewだけを見ることができませんでした。とにかくそんなやり方で試してみると結果が表示されます。ありがとうございます。 – pedr0

+0

コースが正しいです。私はほぼ同じ答えを書いたが、彼は私の30秒前にそこに着いた。 :) –

+0

しかし、アンドロイドの文書は言う:onSurfaceCreated(GL10、EGLConfig)とあなたは言う:onSurfaceChanged、これらの2つのメソッドは何ですか? – pedr0

関連する問題