0

基本的に、Android と OpenGL ES 2.0 のプログラミングを掘り下げたところ、ちょっとした問題にぶつかりました。

私のコードは正常にコンパイルされて実行されますが、opengl 関数が機能していないようです。

GLES20.createShader(GLES20.GL_VERTEX_SHADER); 
GLES20.glCreateProgram();

すべて 0 を返します。

同様にこれ:

int posHandle = GLES20.glGetAttribLocation(mShader.getProgramId(), "vPosition");

-1 などを返します。

アクティビティの作成方法:

// Activity

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    mSurfaceView = new GLESSurfaceView(this);

    final ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
    final ConfigurationInfo configInfo = activityManager.getDeviceConfigurationInfo();
    final boolean supports_gles2 = configInfo.reqGlEsVersion >= 0x20000;

    if (supports_gles2)
    {
        mSurfaceView.setEGLContextClientVersion(2);
        mSurfaceView.setRenderer(new GLESRenderer());
    }
    else
    {
        //Log.e("", "Doesn't support GLES 2.0");
    }

    setContentView(mSurfaceView);
}

これは AndroidManifest.xml にあります

<uses-feature android:glEsVersion="0x00020000" android:required="true" />

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />   

GLES 2.0 の機能を正常に動作させるには、それでよいのでしょうか? 必要に応じてさらにコードを追加することもできますが、基本的には、シェーダーのセットアップ、頂点バッファーの作成、および基本的な形状のレンダリングのみです。

乾杯

編集: GLES20.glGetError() が GL_NO_ERROR フラグを返すことを追加する必要があります

4

2 に答える 2

0

Android では、すべての OpenGL ES 呼び出しを同じスレッドから実行する必要があります。GLSurfaceView を使用すると、スレッド化が処理されます。この記事では、次のように詳しく説明しています。

http://software.intel.com/en-us/articles/porting-opengl-games-to-android-on-intel-atom-processors-part-1

于 2013-06-23T16:00:25.880 に答える