итак, через день я понял это. Я использовал Семафор, изначально установленный на 1, и приобрел его до LoadTextureFromAssets(...)
и выпустил его в конце Runnable
, отправленного в GL для загрузки текстуры:
public boolean handleMessage(Message msg) {
switch(msg.what) {
case MESSAGE_FROM_MAIN_THREAD:
try {
m_Semaphore.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
loadTextureFromAssets(msg.obj.toString(), msg.arg1);
break;
case MESSAGE_FROM_GL_THREAD:
// not needed for now
break;
}
return true;
}
и метод загрузки:
// load the image from assests and then...
m_GLSurface.queueEvent(new Runnable() {
public void run() {
gl.glBindTexture(GL10.GL_TEXTURE_2D, m_TexId);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
if (gl instanceof GL11) {
// GL 1.1 has auto mip-map generation
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR_MIPMAP_LINEAR);
gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_GENERATE_MIPMAP, GL11.GL_TRUE);
}
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, m_TexBitmap, 0);
m_Semaphore.release();
}
});
это 100% правильный путь?