My blog

Add intelligent tagline here

[Android][OpenGL] glGenTextures()で失敗する

onClickをトリガーとして、こんな感じで

int[] textures = new int[1];
gl.glGenTextures(1, textures, 0);

テキスチャを作成しようとしていたところ、

E/libEGL  ( 1150): call to OpenGL ES API with no currentcontext (logged
once per thread)

というエラーが出て、さらに、設定されたtextures[0]には0が入っている状態になりました。 ちゃんとbindできていないようで、これを表示しようとしても真っ黒なテキスチャが表示されるだけです。

これは、(AndroidのContextではなく)OpenGLのレンダリングコンテキストが違うことが原因なようです。

WindowsではwglCreateContext()やwglMakeCurrent()というレンダリングコンテキストを切り替える命令があるそうですが、Androidでは、 glGenTexture returning 0 によると、GL Renderのスレッドだけが、glのcontextを保持しており、切り替えることはできないとのこと。従って、GL Renderのスレッドから呼び出すか、あるいはqueueEvent()を使えだそうです。

http://developer.android.com/reference/android/opengl/GLSurfaceView.html#queueEvent