如何正确将javax.microedition.khronos.opengles.GL10传递给AsyncTask作为参数。这是我尝试但无法正常工作的代码。如果我直接将参数传递给SavePNG方法,它将起作用。有什么线索吗?谢谢。
这是我的代码:
if (mTakeScreenshot) {
mTakeScreenshot = false;
MyTaskParams params = new MyTaskParams(0, 0, mViewWidth, mViewHeight, gl);
MyTask myTask = new MyTask();
myTask.execute(params);
}
private static class MyTaskParams {
int x;
int y;
int w;
int h;
GL10 gl;
MyTaskParams(int x, int y, int w, int h, GL10 gl) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.gl = gl;
}
}
public class MyTask extends AsyncTask<MyTaskParams, Void, Void> {
@Override
protected Void doInBackground(MyTaskParams... params) {
int x = params[0].x;
int y = params[0].y;
int w = params[0].w;
int h = params[0].h;
GL10 gl = params[0].gl;
SavePNG(0, 0, w, h, gl);
return null;
}
}
答案 0 :(得分:0)
OpenGL帧缓冲操作是单线程的, 因此,您将需要使用回调函数并在必要时调用它, 通常在按键或按钮上按回叫功能。
即
void main()
{
//GL Operations
//GLswapbuffers
//call here or in key / button press callback function
doInBackground(params);
}
protected Void doInBackground(MyTaskParams... params) {
int x = params[0].x;
int y = params[0].y;
int w = params[0].w;
int h = params[0].h;
GL10 gl = params[0].gl;
SavePNG(0, 0, w, h, gl);
}