Java 如何在unity android插件的子线程中连续调用gles20
我的相机USB设备有问题。它的SDK很特别,我不能在unity中使用webtexture。 所以我想使用gles20将相机图像传输到unity。但是回调在子线程中,无法呈现gles20。 纹理id始终为0Java 如何在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
公共类摄像师:单一行为
{
公共类侦听器: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){
//启动相机捕获数据
}