现在我有一个客户端和服务器。服务器正在制作屏幕截图,并以字节为单位将其发送给我的客户端。
我在这里获取字节并将其放入我的纹理中:
private IEnumerator RenderImage(byte[] values)
{
var texture = new Texture2D(128, 128);
texture.LoadImage(values); // <-- is running on main thread -> lag
texture.Apply();
RawImage.texture = texture;
yield return null;
}
这有效,但会导致hololens短暂冻结,可能持续1/2秒。
1。。我已经多次阅读 LoadImage 将在主线程上运行,并且您无法将其移动到其他地方。
2。。使用 Texture2D.LoadRawTextureData 应该可以更快地工作并解决我的问题。但是使用它会引发一个例外,即Im无法提供足够的数据。编写类似
var texture = new Texture2D(128, 128, TextureFormat.RGBA32, false);
之类的内容无法解决问题。
sb知道如何以一种更有效的方式对字节进行编码,或者使主线程在解码图像时不会卡住吗?
-编辑- 我忘了说我正在使用此Main-Thread-Dispatcher,但没有帮助:
private void OnMessageReceived(byte[] values)
{
UnityMainThreadDispatcher.Instance().Enqueue(RenderImage(values));
}
private IEnumerator RenderImage(byte[] values)
{
var texture = new Texture2D(128, 128, TextureFormat.RGBA32, false);
texture.LoadImage(values); // <-- is running on main thread -> lag
texture.Apply();
RawImage.texture = texture;
yield return null;
}