0
我正試圖調用一個方法,該方法在我正在從openGL線程中工作的類之外,但是我得到一個Can't create handler inside thread that has not called Looper.prepare()
運行時異常。有沒有人知道一種解決方法,而不是將 方法放在同一個類中?從openGL類中調用外部方法
程序中斷@Extract cam = new Extract();
public void onDrawFrame(GL10 gl) {
onDrawFrameCounter++;
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
bindCameraTexture(gl);
System.out.println(Global.bearing);
float bear = Global.bearing;
gl.glLoadIdentity();
gl.glNormal3f(0,0,1);
System.out.println("ARRAY!: " + GLCamTest.array.length);
p = 0;
gl.glRotatef(bear, 1, 0, 0);
int q = 0;
int e = 0;
if(q < Global.cubes){
Extract cam = new Extract();
Bitmap image = cam.extractimage(q);
final int TILE_WIDTH = 512;
final int TILE_HEIGHT = 512;
final int TILE_SIZE = TILE_WIDTH * TILE_HEIGHT;
int[] pixels = new int[TILE_WIDTH];
short[] rgb_565 = new short[TILE_SIZE];
// Convert 8888 to 565, and swap red and green channel position:
int i = 0;
for (int y = 0; y < TILE_HEIGHT; y++) {
image.getPixels(pixels, 0, TILE_WIDTH, 0, y, TILE_WIDTH,
1);
for (int x = 0; x < TILE_WIDTH; x++) {
int argb = pixels[x];
int r = 0x1f & (argb >> 19); // Take 5 bits from23..19
int g = 0x3f & (argb >> 10); // Take 6 bits from15..10
int b = 0x1f & (argb >> 3); // Take 5 bits from 7.. 3
int rgb = (r << 11) | (g << 5) | b;
rgb_565[i] = (short) rgb;
++i;
}
}
ShortBuffer textureBuffer = ShortBuffer.wrap (rgb_565, 0,
TILE_SIZE);
gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGB, 48, 48, 0,
GL10.GL_RGB, GL10.GL_UNSIGNED_SHORT_5_6_5,
textureBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, e, 4);
e = e + 4;
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, e, 4);
e = e + 4;
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, e, 4);
e = e + 4;
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, e, 4);
e = e + 4;
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, e, 4);
e = e + 4;
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, e, 4);
e = e + 4;
q++;
}
}
您可能想要發佈一些示例代碼,不清楚線程是如何啓動的,以及您是否嘗試使用處理程序。 – SirDarius 2010-07-19 15:57:22
我編輯了我的問題來添加代碼。 – Skizit 2010-07-19 15:59:53