状况
我有一台工业GigE相机。 GigE或USB或任何其他接口在这里无所谓。关键是摄像机不能被视为网络摄像头,因为它有自己的驱动程序。使用该相机SDK,我可以使用OpenCV将图像读出到cv :: Mat中,然后转换,不失真并在这些图像上做一些其他处理。这很好用。
然后,我想使用该相机在Unity3D(OS = Windows)中实时纹理四边形。我编写了一个DLL,它使用CPU将图像复制到Texture2D中,并使用Unity3D中的PInvoke调用该DLL。管道是:
我在写这个问题的时候注意到,Texture2D有另一种形式(自从我编写了我认为的DLL之后的新形式),用于从非托管缓冲区加载其内部缓冲区:http://docs.unity3d.com/ScriptReference/Texture2D.LoadRawTextureData.html
因此,可以删除第2步和第3步,但仍需要在上传到GPU之前加载Texture2D内部缓冲区。
问题
我想尽可能从管道中撤出CPU。 我想将cv :: Mat直接上传到GPU中的Texture2D。
有一种Texture2D方法可以在GPU上获取原生纹理指针:http://docs.unity3d.com/ScriptReference/Texture.GetNativeTexturePtr.html
我不知道如何处理它。我知道Direct3D中的一些基本内容(特别是D3D11),但我不是专家。任何人都可以使用或不使用代码解释如何将一些cv :: Mat复制到一些D3D11(或WindowsD的D3D12)纹理?