我正在编写一个渲染应用程序,它作为一种虚拟相机与图像处理器进行通信,并且我试图找出将纹理数据从一个进程写入另一个进程的等待图像缓冲区的最快方法。
从理论上讲,我认为应该可以将 1 个 DirectX 副本从 VRAM 直接复制到我想要的内存区域,但我无法弄清楚如何指定要占用纹理的内存区域,因此必须执行额外的内存。欢迎使用 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,所以进展缓慢。谢谢!