0

有一个带有自己的 Direct3D 设备的窗口,我们称之为 mainWindow。mainWindow 及其东西是由其他人创建的。他们给了我一些他们在主窗口上绘制的 Direct3D 表面(IDirect3DSurface9 指针)。
我已经从他们的一个回调中启动了一个线程,并使用 winAPI 创建了我自己的窗口。(我在这个问题上有一点类似的情况)
我想在我的窗口上绘制那些 RTT 输出。所以我试图将表面复制到我在自己的directx设备中创建的表面/纹理中,该设备在我的窗口上绘制。

我在尝试这样做时发现的一些东西,

  • 这可以使用D3DXSaveSurfaceToFileInMemory(...)D3DXCreateTextureFromFileInMemory(...)函数轻松完成。
  • StrechRect(...)功能不适用于使用两个设备创建的两个表面。

我尝试锁定表面并将数据从一个复制到另一个,但它似乎不起作用。但我会再试一次。(同时锁定两个不同设备的表面是否非法?)

你们有什么方法知道或建议这样做吗?

---编辑---
MSDN说(链接到页面

在 Windows Vista 中,CreateTexture 可以从系统内存指针创建纹理,从而允许应用程序更灵活地使用、分配和删除系统内存。例如,一个应用程序可以传递一个 GDI 系统内存位图指针并围绕它获得一个 Direct3D 纹理接口。将系统内存指针与 CreateTexture 一起使用具有以下限制。

  • 纹理的间距必须等于宽度乘以每个像素的字节数。
  • 仅支持具有单个 mipmap 级别的纹理。Levels 参数必须为 1。
  • Pool 参数必须是 D3DPOOL_SYSTEMMEM。
  • pSharedHandle 参数必须是指向可以保存系统内存点的缓冲区的有效指针;*pSharedHandle 必须是指向系统内存的有效指针,其大小以纹理宽度 * 纹理高度 * 纹理格式的每像素字节数为单位。

我找不到以这种方式创建纹理的任何示例,但我尝试这样做,我得到的只是一个充满噪音的输出,没有别的。如果有人可以帮助我,我想我的问题会在一定程度上得到解决....msdn在这里所说的有什么好的例子..??

4

1 回答 1

2

如果你在 vista/win7/win8,你可以使用Sharing_Resources然后你就不需要任何副本了。

于 2012-06-05T04:55:16.547 回答