2016-06-24 25 views
0

私は現在Androidのサンアンジェルスの例をOpenGL ES 2.0に変換しています。現在の1.0(自分のバージョンのデモを使用しています)ではありません。私は現在、このエラーが発生しており、どこが間違っているのか分かりません。ここで Androidでopengles 1.0〜2.0を改修NDK

06-24 11:02:48.246 2528-2528/com.example.SanAngeles E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.SanAngeles, PID: 2528 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.SanAngeles/com.example.SanAngeles.DemoActivity}: java.lang.IllegalStateException: setRenderer has already been called for this instance. 

は(私が問題にしていると仮定)私のDemoActivityです: パッケージcom.example.SanAngeles。

import android.app.Activity; 
import android.content.Context; 
import android.opengl.GLSurfaceView; 
import android.os.Bundle; 
import android.view.MotionEvent; 

import javax.microedition.khronos.egl.EGLConfig; 
import javax.microedition.khronos.opengles.GL10; 


public class DemoActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mGLView = new DemoGLSurfaceView(this); 
     setContentView(mGLView); 
    } 

    private GLSurfaceView mGLView; 

    static { 
     System.loadLibrary("sanangeles"); 
    } 
} 

class DemoGLSurfaceView extends GLSurfaceView { 
    public DemoGLSurfaceView(Context context) { 
     super(context); 
     setEGLContextClientVersion(2); 
     mRenderer = new DemoRenderer(); 
     setRenderer(mRenderer); 
    } 

    public boolean onTouchEvent(final MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      nativeTogglePauseResume(); 
     } 
     return true; 
    } 


    DemoRenderer mRenderer; 

    private static native void nativeTogglePauseResume(); 
} 

class DemoRenderer implements GLSurfaceView.Renderer { 
    public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
     nativeInit(); 
    } 

    public void onSurfaceChanged(GL10 gl, int w, int h) { 
     //gl.glViewport(0, 0, w, h); 
     nativeResize(w, h); 
    } 

    public void onDrawFrame(GL10 gl) { 
     nativeRender(); 
    } 

    private static native void nativeInit(); 
    private static native void nativeResize(int w, int h); 
    private static native void nativeRender(); 
    private static native void nativeDone(); 
} 
+0

これはアクティビティ全体のコードですか? onStart()メソッドまたはonResume()メソッドにコードがありますか? – brohan322

答えて

1

あなたはドキュメントがhereを見つけることができます(それはまた、あなたのマシンにインストールされているSDKのどこかになります)GlSurfaceView hereのためのソースコードをのぞくことができます。

  • setEGLContextFactory
  • setEGLWindowSurfaceFactory
  • (2回目)

    • SetRenderer:

      情報の該当ビットは、あなたがSetRenderer一度呼び出した後、あなたはその後、次を呼び出すことが許可されていないということですsetEGLConfigChooser

    • setEGLContextClientVersion

    あなたが投稿したコードにはこれまでのコードは表示されませんが、投稿していないコードでこれらの関数のいずれかを呼び出すと思われます。 SetEGL *関数はSetRendererの前に呼び出されて動作する必要があります。

  • 関連する問題