Android 已解决:GL上下文不存在';在MotionEvent之后,不要创建任何新的GL对象 我实现了一个本地JNI C++ OpenGL ES3,我在java上创建了 GLASTURVIEW,并且一切都很好,直到我开始处理运动事件。在C++中,所有新的GL对象创作都不工作,如 GLBDN(瓦奥);代码>它从不更改VAO默认值

Android 已解决:GL上下文不存在';在MotionEvent之后,不要创建任何新的GL对象 我实现了一个本地JNI C++ OpenGL ES3,我在java上创建了 GLASTURVIEW,并且一切都很好,直到我开始处理运动事件。在C++中,所有新的GL对象创作都不工作,如 GLBDN(瓦奥);代码>它从不更改VAO默认值,android,opengl-es,java-native-interface,glsurfaceview,Android,Opengl Es,Java Native Interface,Glsurfaceview,我想知道GL上下文是否失去焦点或发生了更改,因此我必须使用eglmakefurrent?如果是,如何在本机中执行此操作 这就是我如何在Java和C++之间处理MotionEvent: //我覆盖了GLSURFACHEVIEW onTouchEvent public class MyGLSurfaceView extends GLSurfaceView { public MyGLSurfaceView(Context context){ super(context);

我想知道GL上下文是否失去焦点或发生了更改,因此我必须使用
eglmakefurrent
?如果是,如何在本机中执行此操作

这就是我如何在Java和C++之间处理
MotionEvent

//我覆盖了GLSURFACHEVIEW onTouchEvent

public class MyGLSurfaceView extends GLSurfaceView {
    public MyGLSurfaceView(Context context){
        super(context);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        ActivityMain.onTouch(event);
        return true;
    }
}
ActivityMain.onTouch(事件)
是一个本机方法,它将运动事件发送到本机环境并读取一些数据,这是本机方法

JNIEXPORT void JNICALL
Java_com_game_ActivityMain_onTouch(JNIEnv *jenv, jclass obj,jobject motionEvent) {
    jclass motionEventClass=jenv->GetObjectClass(motionEvent);

    jmethodID pointersCountMethodId = jenv->GetMethodID(motionEventClass,"getPointerCount", "()I");
    int pointersCount = jenv->CallIntMethod(motionEvent, pointersCountMethodId);
    jmethodID getActionMethodId = jenv->GetMethodID(motionEventClass, "getAction", "()I");
    int32_t action = jenv->CallIntMethod(motionEvent, getActionMethodId);

    jmethodID getXMethodId = jenv->GetMethodID(motionEventClass, "getX", "(I)F");
    float x0 = jenv->CallFloatMethod(motionEvent, getXMethodId,0);

    jmethodID getYMethodId = jenv->GetMethodID(motionEventClass, "getY", "(I)F");
    float y0 = jenv->CallFloatMethod(motionEvent, getYMethodId,0);

    float x1=0;
    float y1=0;
    if(pointersCount>1){
        x1 = jenv->CallFloatMethod(motionEvent, getXMethodId,1);
        y1 = jenv->CallFloatMethod(motionEvent, getYMethodId,1);
    }

    States::MotionEvent inputEvent;
    inputEvent.PointersCount=pointersCount;
    inputEvent.Action=action;
    inputEvent.X0=x0;
    inputEvent.Y0=y0;
    inputEvent.X1=x1;
    inputEvent.Y1=y1;
    game->OnMotionEvent(inputEvent);
}
编辑:解决方案

我刚刚用这个替换了OnTouchEvent

    @Override
public boolean onTouchEvent(final MotionEvent event) {
    queueEvent(new Runnable(){
        public void run() {
            ActivityMain.onTouch(event);
        }});
    return true;
}
现在它工作得很好。但我不明白原因。有什么想法吗