2017-11-06 18 views
0

GLSurfaceを使用してカスタムビューを表示しようとしています。

マイXML

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="net.letsense.matrixtest.MainActivity"> 


    <android.opengl.GLSurfaceView 
     android:layout_width="300dp" 
     android:layout_height="300dp" 
     android:id="@+id/my_surface_view" 
     /> 

</android.support.constraint.ConstraintLayout> 

私のメイン

package net.letsense.matrixtest; 

import android.app.Activity; 
import android.opengl.GLSurfaceView; 
import android.os.Bundle; 

/** 
* Created by borislegovic on 03/11/2017. 
*/ 

public class Main extends Activity { 
    private int mPositionHandle; 
    private int mColorHandle; 


    private GLSurfaceView mGLView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Create a GLSurfaceView instance and set it 
     // as the ContentView for this Activity. 
     // mGLView = new MyGLSurfaceView(this); 
     // mGLView = findViewById(R.id.my_surface_view); 
     //mGLView.setEGLContextClientVersion(2); 
     // mGLView = new MyGLSurfaceView(this); 
    // setContentView(mGLView); 
    } 

    @Override 
    protected void onPause() { 
     // The following call pauses the rendering thread. 
     // If your OpenGL application is memory intensive, 
     // you should consider de-allocating objects that 
     // consume significant memory here. 
     super.onPause(); 
     // mGLView.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     // The following call resumes a paused rendering thread. 
     // If you de-allocated graphic objects for onPause() 
     // this is a good place to re-allocate them. 
     super.onResume(); 
     // mGLView.onResume(); 
    } 

} 

は奇妙なことは、私はsurfaceViewオブジェクトに何かをいけないし、それはまだ私にこのクラッシュを与えるです:

のjava.lang.NullPointerException :NULLオブジェクト参照で仮想メソッド 'void android.opengl.GLSurfaceView $ GLThread.surfaceCreated()'を呼び出そうとしました。 ndroid.opengl.GLSurfaceView.surfaceCreated(GLSurfaceView.java:524)

答えて

0

GLSurfaceViewは初期化されていません。初期化する必要があります。

class MyGLRenderer implements GLSurfaceView.Renderer { 
    public void onSurfaceCreated(GL10 gl, EGLConfig config) 
    { 
     gl.glClearColor(1.0f, 0.0f, 0.0f, 1.0f); 
    } 

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

    public void onDrawFrame(GL10 gl) { 
     gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
    } 
} 

をしてからOnCreateの方法にこれを追加します:

ファーストクラスMyGLRendererを作成

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

      mGLView = (GLSurfaceView) this.findViewById(R.id.my_surface_view); 
      mGLView.setRenderer(new MyGLRenderer()); 

    } 

あなたは、OpenGL ES hereについての詳細を読むことができます。

+0

救命回答。ありがとうございました! –

関連する問題