Java 如何在unity android插件的子线程中连续调用gles20

Java 如何在unity android插件的子线程中连续调用gles20,java,c#,android,unity3d,opengl-es-2.0,Java,C#,Android,Unity3d,Opengl Es 2.0,我的相机USB设备有问题。它的SDK很特别,我不能在unity中使用webtexture。 所以我想使用gles20将相机图像传输到unity。但是回调在子线程中,无法呈现gles20。 纹理id始终为0 我尝试在函数StartCapture中编写glGenTextures,纹理id不是0,但回调无法找到纹理 我搜索子线程调用主线程的解决方案。大多数都是Activity.runOnUIThread。但抓捕行动突然中断,并立即停止 公共类摄像师:单一行为 { 公共类侦听器:AndroidJavaP

我的相机USB设备有问题。它的SDK很特别,我不能在unity中使用webtexture。 所以我想使用gles20将相机图像传输到unity。但是回调在子线程中,无法呈现gles20。 纹理id始终为0

  • 我尝试在函数StartCapture中编写glGenTextures,纹理id不是0,但回调无法找到纹理
  • 我搜索子线程调用主线程的解决方案。大多数都是Activity.runOnUIThread。但抓捕行动突然中断,并立即停止
  • 公共类摄像师:单一行为
    {
    公共类侦听器:AndroidJavaProxy
    {
    //初始化代理侦听器
    .........
    公共空摄影机字节(长时间戳)
    {
    LogError(“单位时间戳:+时间戳”);
    }
    公共void SetTextureId(int-textureId)
    {
    this.textureId=textureId;
    Texture2D externTex=Texture2D.CreateExternalTexture(640480,TextureFormat.RGB565,false,false,(IntPtr)textureId);
    UpdateExternalTexture(externTex.GetNativeTexturePtr());
    }
    }
    私有void Start()
    {
    //初始化java摄像头插件
    .......
    }
    //触发按钮
    公共空间开放摄影机(布尔等参线)
    {
    plugin.Call(“OpenCamera”,isOpen);
    }
    公共无效开始许可证(bool isCapture)
    {
    调用(“StartCapture”,isCapture);
    }
    
    公共类插件{
    私密信息交换;
    公共插件(上下文){
    _上下文=上下文;
    }
    public void InitCameraManager(PluginListener侦听器){
    如果(listener!=null)\u listener=listener;
    _dataCallback=新CaptureDataCallback(){
    @凌驾
    public void onCaptureData(长时间戳,字节[]字节){
    Log.d(“数据”,String.format(“时间戳:%d”,时间戳));
    _listener.cameraBytes(时间戳);
    Log.d(“摄像机”,“字节长度:”+Bytes.length);
    int[]纹理=新的int[1];
    GLES20.glGenTextures(1,纹理,0);
    textureId=纹理[0];
    Log.d(“摄影机”,“纹理id:+纹理[0]);
    位图Bitmap=Bitmap.createBitmap(640480,Bitmap.Config.RGB_565);
    如果(textureId!=0){
    Log.d(“摄影机”、“纹理id:+textureId”);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,textureId);
    GLES20.glTexParameteri(GLES20.GL_纹理_2D,GLES20.GL_纹理_最小过滤器,
    GLES20.GL_LINEAR_MIPMAP_LINEAR);
    GLES20.glTexParameteri(GLES20.GL_纹理2D,GLES20.GL_纹理MAG_过滤器,
    GLES20.GL_线性);
    GLUtils.texImage2D(GLES20.GL_纹理_2D,0,位图,0);
    bitmap.recycle();
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,0);
    _SetTextureId(textureId);
    }否则{
    Log.d(“摄像头”,“纹理无法加载”);
    }
    }
    };
    公共空心OpenCamera(布尔等参线){
    //打开设备摄像机并在摄像机中设置数据回调
    ....
    }
    public void StartCapture(布尔值isCapture){
    //启动相机捕获数据
    }