2016-07-04 9 views
0

GLSurfaceViewでレンダリングされたメッシュを変更するのに問題があります。レンダラーでより正確には、ワークフローで理解できなかったことがあります。レンダラークラス。だから、GLSurfaceView.Rendererでレンダリングされたオブジェクトを変更する方法

、我々はこれを持って考えてみましょう:

public class MyRenderer extends GLSurfaceView.Renderer{ 
    private Mesh aMesh; 

    @Override 
    public void onSurfaceCreated(GL10 gl, EGLConfig config){ 
     GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
     aMesh = new Mesh("TestMesh1"); 
    } 
    @Override 
    public void onSurfaceChanged(GL10 gl, int width, int height) { 
     ...Creating viewport... 
    } 
    @Override 
    public void onDrawFrame(GL10 gl) { 
     GLES20.glClear(gl.GL_COLOR_BUFFER_BIT); 
     ...all Maths to create mvpMatrix... 
     aMesh.draw(mvpMatrix); 
    } 
} 

だから、これは完全に働いている、アメッシュは、すべての良い設定で、画面上の表示です。 changeMes​​hはonDrawFrameになるだろう呼び出し、私の心の中でそう

public class MyRenderer extends GLSurfaceView.Renderer{ 
    private Mesh aMesh; 

    public void changeMesh(String newMeshName){ 
     GLES20.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT); 
     .... 
     aMesh=new Mesh(newMeshName); 
    } 

    @Override 
    public void onSurfaceCreated(GL10 gl, EGLConfig config){ 
     .... 
    } 
    @Override 
    public void onSurfaceChanged(GL10 gl, int width, int height) { 
     ... 
    } 
    @Override 
    public void onDrawFrame(GL10 gl) { 
     aMesh.draw(mvpMatrix); 
    } 
} 

:今、私は次のように、ユーザーがボタンを押しているこのメッシュを変更するには、と私はレンダラで特定のメソッドを作成し、私のレンダラをリフレッシュしたいです新しいモデルを使ってメッシュを再描画する方法? 私の問題は、結果が空のレンダラーだということです。それはクラッシュさえありません。 changeMes​​h()を呼び出すと、以前によく表示されていたメッシュが(期待通りに)消えますが、新しいメッシュは描画されません。

私は、新しいレンダラー(少し重いようです)を作成する必要があるのでしょうか?手動でOnSurfaceCreatedでパスを尋ねる方法はありますか?私はこのバグで少し失われている。

+0

あなたのコードはうまくいくはずです。私はあなたのメッシュを変更し、何が描画されているかを確認した後、デバッガの描画呼び出しを実行します。 –

答えて

1

新しいの呼び出しがありましたが、その理由を正確には説明できませんでしたが、OpenGLオブジェクトとバッファの間のリンクが途切れているようです。私は、他のメッシュのデータに合わせてメッシュのインスタンス内のすべてのデータを変更する一種の「セッター」でこの問題を解決しました。この方法で、最初のインスタンスのメモリアドレスを節約できます。

これはちょっと奇妙ですが、これは私の問題を解決しました。多分それは他の人を助けることができます。

関連する問題