私はOpenGL ES 2.0とAndroid NDK r8bを使用しています。私は、ワーカースレッド用に共有するコンテキストを持っています。 eglMakeCurrentを使用して共有コンテキストをワーカースレッドにバインドしようとすると、エラーEGL_BAD_ALLOCが発生します。EGL_BAD_ALLOCでeglMakeCurrentが失敗するのはなぜですか?
私が混乱するのは、このコードが以前より完全に働いていたことです。私はそれを壊すために何をしたのかよくわかりません。EGLのドキュメントでは、このエラーはリソースが利用できないということですが、この全く同じデバイスで完全に動作していた同じアプリケーションを実行し、すべてのテクスチャがメインスレッドから正常に読み込まれます。
このエラーの原因は何ですか?
これは私のEGL初期化です:
bool Initialize(void *displaySurface)
{
assert(displaySurface);
ANativeWindow *window = (ANativeWindow*)displaySurface;
EGLint dummy, format;
display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(display, 0, 0);
const EGLint configAttribs[] =
{
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_ALPHA_SIZE, 8,
EGL_BUFFER_SIZE, 32,
EGL_DEPTH_SIZE, 24,
EGL_NONE
};
const EGLint auxConfigAttribs[] =
{
EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_ALPHA_SIZE, 8,
EGL_BUFFER_SIZE, 32,
EGL_DEPTH_SIZE, 24,
EGL_NONE
};
EGLint contextAttribs[] =
{
EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE
};
EGLint numConfigs;
EGLConfig config;
//// create main context
eglChooseConfig(display, configAttribs, &config, 1, &numConfigs);
Trace("eglChooseConfig: " + GetEglError());
eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);
Trace("eglGetConfigAttrib: " + GetEglError());
ANativeWindow_setBuffersGeometry(window, 0, 0, format);
Trace("ANativeWindow_setBuffersGeometry: " + GetEglError());
surface = eglCreateWindowSurface(display, config, window, NULL);
Trace("eglCreateWindowSurface: " + GetEglError());
context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs);
Trace("eglCreateContext: " + GetEglError());
//// create auxiliary context
eglChooseConfig(display, auxConfigAttribs, &config, 1, &numConfigs);
Trace("AUX eglChooseConfig: " + GetEglError());
auxSurface = eglCreatePbufferSurface(display, config, NULL);
Trace("AUX eglCreatePbufferSurface: " + GetEglError());
auxContext = eglCreateContext(display, config, context, contextAttribs);
Trace("AUX eglCreateContext: " + GetEglError());
//// make main context current
eglMakeCurrent(display, surface, surface, context);
Trace("eglMakeCurrent: " + GetError());
eglQuerySurface(display, surface, EGL_WIDTH, &width);
eglQuerySurface(display, surface, EGL_HEIGHT, &height);
SetViewport(width, height);
EnableDepthBuffer(enableDepthTest);
EnableBackfaceCulling(enableBackfaceCull);
SetBackgroundColor(backgroundColor);
glDisable(GL_DITHER);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Trace("finished" + GetEglError());
alive = true;
return true;
}
編集:
は私が間違っているかもしれないが、このエラーは、NDKツールチェーンが更新されたのと同じ時間に現れているようだ...しかし、私はテストすることはできません私はNDK 7cを入手できる場所へのリンクを誰かが持っていれば、それも役立つでしょう。
私の想像では、私はアル・バンディは、C++のコードを書くことを想像しないでしょう決して... –