Android 从openGL类中调用外部方法

Android 从openGL类中调用外部方法,android,Android,我试图从openGL线程调用一个类之外的方法,但是我得到一个无法创建的方法 未调用Looper.prepare()的线程内的处理程序运行时异常。有没有人知道一种不用把 方法在同一类中 程序中断@Extract cam=new Extract() public void onDrawFrame(GL10 gl){ onDrawFrameCounter++; glEnable(GL10.Glu纹理2D); gl.glClear(GL10.gl_颜色_缓冲_位| GL10.gl_深度_缓冲_位); 结

我试图从openGL线程调用一个类之外的方法,但是我得到一个
无法创建的方法
未调用Looper.prepare()的线程内的处理程序
运行时异常。有没有人知道一种不用把 方法在同一类中

程序中断@
Extract cam=new Extract()

public void onDrawFrame(GL10 gl){
onDrawFrameCounter++;
glEnable(GL10.Glu纹理2D);
gl.glClear(GL10.gl_颜色_缓冲_位| GL10.gl_深度_缓冲_位);
结合剂(gl);
系统输出打印LN(全球轴承);
浮动轴承=全局轴承;
gl.glLoadIdentity();
gl.glNormal3f(0,0,1);
System.out.println(“数组!:”+GLCamTest.ARRAY.length);
p=0;
gl.glRotatef(bear,1,0,0);
int q=0;
int e=0;
if(q>19);//从23..19中取5位
int g=0x3f&(argb>>10);//从15..10中获取6位
int b=0x1f&(argb>>3);//从7..3取5位

int rgb=(r该错误表示您正在调用某些预期从UI线程调用的代码,但实际不是。gl onDrawFrame不是从UI线程调用的,因此出现错误

从代码上看,这似乎发生在Extract类的构造函数中。类的全名是什么

假设提取方法从相机或类似设备加载图像。我会将执行“提取”的代码移出gl线程,您可能不希望通过在gl线程上执行此转换来限制fps:-)最好在单独的线程上“尽快”执行此操作,并让gl绘制最新的


如果您确实需要在此处执行此操作,请使用。

您可能希望发布一些示例代码,但不清楚线程是如何启动的,以及您是否尝试使用处理程序。我已编辑了我的问题以添加代码。
        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++;
    }

}