为什么 glGenTextures returns 在 OpenGL 上下文线程 (Android) 上为零?
Why does glGenTextures returns zero on OpenGL context Thread (Android)?
我遇到一个问题,其中 GLES20.glGenTextures() 为纹理名称返回零,即使 运行 在原始线程(即 OpenGL 上下文线程)上也是如此。
当我运行代码
final Handler handlerForOriginalThread = new Handler(activity.getMainLooper());
final int[] textureHandleA = new int[1];
GLES20.glGenTextures(1, textureHandleA, 0);
Log.v(TAG, "textureHandle (A): " + textureHandleA[0]);
new Thread(new Runnable()
{
public void run()
{
//[Prepare bitmap here]
handlerForOriginalThread.post(new Runnable()
{
public void run()
{
final int[] textureHandle = new int[1];
GLES20.glGenTextures(1, textureHandle, 0);
Log.v(TAG, "textureHandle (B): " + textureHandle[0]);
//[Load bitmap to texture here]
}
});
}
}).start();
glGenTextures returns (A) 的有效名称和 (B) 的零。
为什么会这样?
这类似于 glGenTextures returns zero in background thread ,但在这种情况下,代码实际上 运行ning 在 OpenGL 上下文线程上。
我明白了。事实证明 "original thread" 与我的 activity 的主循环程序不同。
long origThreadID = Thread.currentThread().getId();
Log.d(TAG, "origThreadID (A): " + origThreadID);
final Handler handlerForOriginalThread = new Handler(activity.getMainLooper());
new Thread(new Runnable()
{
public void run()
{
handlerForOriginalThread.post(new Runnable()
{
public void run()
{
long origThreadID = Thread.currentThread().getId();
Log.d(TAG, "origThreadID (B): " + origThreadID);
}
});
}
}).start();
结果
origThreadID (A): 9467
origThreadID (B): 1
我发现它也 returns 0 如果是:
1) 在调用 eglMakeCurrent() 之前调用它
2) 您与表面属性不匹配,然后 eglMakeCurrent 似乎有效但实际上写了一个
eglMakeCurrent:992 error 3009 (EGL_BAD_MATCH)
到日志
我遇到一个问题,其中 GLES20.glGenTextures() 为纹理名称返回零,即使 运行 在原始线程(即 OpenGL 上下文线程)上也是如此。
当我运行代码
final Handler handlerForOriginalThread = new Handler(activity.getMainLooper());
final int[] textureHandleA = new int[1];
GLES20.glGenTextures(1, textureHandleA, 0);
Log.v(TAG, "textureHandle (A): " + textureHandleA[0]);
new Thread(new Runnable()
{
public void run()
{
//[Prepare bitmap here]
handlerForOriginalThread.post(new Runnable()
{
public void run()
{
final int[] textureHandle = new int[1];
GLES20.glGenTextures(1, textureHandle, 0);
Log.v(TAG, "textureHandle (B): " + textureHandle[0]);
//[Load bitmap to texture here]
}
});
}
}).start();
glGenTextures returns (A) 的有效名称和 (B) 的零。
为什么会这样?
这类似于 glGenTextures returns zero in background thread ,但在这种情况下,代码实际上 运行ning 在 OpenGL 上下文线程上。
我明白了。事实证明 "original thread" 与我的 activity 的主循环程序不同。
long origThreadID = Thread.currentThread().getId();
Log.d(TAG, "origThreadID (A): " + origThreadID);
final Handler handlerForOriginalThread = new Handler(activity.getMainLooper());
new Thread(new Runnable()
{
public void run()
{
handlerForOriginalThread.post(new Runnable()
{
public void run()
{
long origThreadID = Thread.currentThread().getId();
Log.d(TAG, "origThreadID (B): " + origThreadID);
}
});
}
}).start();
结果
origThreadID (A): 9467
origThreadID (B): 1
我发现它也 returns 0 如果是:
1) 在调用 eglMakeCurrent() 之前调用它 2) 您与表面属性不匹配,然后 eglMakeCurrent 似乎有效但实际上写了一个
eglMakeCurrent:992 error 3009 (EGL_BAD_MATCH)
到日志