developer.android.comから提供されているGLES20サンプルを試すときに、 "実装されていないOpenGL ES APIと呼ばれました"というエラーが表示されます。私はサンプルを修正しました。私はGLSurfaceView.BaseConfigChooser.chooseconfigで、IllegalArgumentExceptionを得た ので 理由があったので、私は新しいOnCreateMethod mGLSurfaceView.setEGLContextClientVersion(2);
Android:GLES20:実装されていないOpenGL ES APIと呼ばれる
を置き換える: "と呼ばれる未実装のOpenGL ESのAPI" エラーがで例えば発生
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mGLSurfaceView = new GLSurfaceView(this);
mGLSurfaceView.setEGLConfigChooser(new EGLConfigChooser()
{
@Override
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display)
{
EGLConfig[] configs = new EGLConfig[1];
int[] num_config = new int[1];
boolean check = false;
int[] configSpec = { EGL10.EGL_DEPTH_SIZE, 16, EGL10.EGL_NONE };
check = egl.eglInitialize(display, new int[] { 2, 0 });
if (!check)
return null;
check = false;
check = egl.eglChooseConfig(display, configSpec, configs, 1, num_config);
if (!check)
return null;
return configs[0];
}
});
mGLSurfaceView.setEGLContextFactory(new EGLContextFactory()
{
@Override
public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context)
{
egl.eglDestroyContext(display, context);
}
@Override
public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig)
{
int[] attrib_list = new int[]{EGL10.EGL_VERSION, 2, EGL10.EGL_NONE};
EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list );
return context;
}
});
mGLSurfaceView.setRenderer(new GLES20TriangleRenderer(this));
setContentView(mGLSurfaceView);
}
GLES20.glCreateShader;
またはGLES20.glShaderSource
。
gl.glGetString(GLES20.GL_VERSION);
を public void onSurfaceCreated(GL10 gl, EGLConfig config)
に、私は考えていたかもしれません。 glGetStringから "OpenGL ES-CM 1.0"が返されました。 OnSurfaceCreatedはconfigを選択してコンテキストを作成した後に呼び出されるので、実際にはわかりません。なぜなら、なぜglGetStringが "OpenGL ES-CM 1.0"を返すのかです。
私はAndroid 2.2 APIを使用しており、Android 2.2仮想デバイスとAndroid 2.2.1搭載のHTC Wildfireでサンプルを試しました。
私は、これはエラーが、文ではありません
私はGL ES 1.1/2.0にあまり経験はありませんが、AFAIKを非常にうまく実装していないエミュレータをよく知っている方が良いです。そして、デバイス上で動作するがエミュレータでは動作しないコードで終わることができます。 – harism