我正在编写一个渲染应用程序,它与图像处理器作为一种虚拟摄像头进行通信,我正在试图找出将纹理数据从一个进程写入另一个进程中等待图像缓冲区的最快方法。
理论上我认为应该可以将VRAM中的1个DirectX拷贝直接复制到我想要的内存区域,但我无法弄清楚如何为纹理占用内存区域,因此必须执行额外的memcpy。欢迎使用DX9或DX11解决方案。
到目前为止,这里的文档:http://msdn.microsoft.com/en-us/library/windows/desktop/bb174363(v=vs.85).aspx最有希望。
“在Windows Vista中,CreateTexture可以从系统内存指针创建纹理,使应用程序在使用,分配和删除系统内存时具有更大的灵活性”
我使用2010年6月的Directx SDK在Windows 7上运行,但是,每当我尝试按照它指定的方式使用该函数时,我的函数都会失败并出现无效的参数错误代码。这是我试过的电话:
static char s_TextureBuffer[640*480*4]; //larger than needed
void* p = (void*)s_TextureBuffer;
HRESULT res = g_D3D9Device->CreateTexture(640,480,1,0, D3DFORMAT::D3DFMT_L8, D3DPOOL::D3DPOOL_SYSTEMMEM, &g_ReadTexture, (void**)p);
我尝试了几种不同的纹理格式,但没有运气。我已经开始研究DX11解决方案了,因为我已经习惯了DX9,所以它的速度很慢。谢谢!