Winapi 将IDirect3DSurface的数据复制到使用两个directx设备创建的另一个IDirect3DSurface
有一个带有自己的Direct3D设备的窗口,我们称之为mainWindow。mainWindow和它的东西是由其他人创建的。他们给了我一些Direct3D曲面(IDirect3DSurface9指针),他们正在主窗口上绘制这些曲面。Winapi 将IDirect3DSurface的数据复制到使用两个directx设备创建的另一个IDirect3DSurface,winapi,directx,direct3d,directx-9,direct3d9,Winapi,Directx,Direct3d,Directx 9,Direct3d9,有一个带有自己的Direct3D设备的窗口,我们称之为mainWindow。mainWindow和它的东西是由其他人创建的。他们给了我一些Direct3D曲面(IDirect3DSurface9指针),他们正在主窗口上绘制这些曲面。 我从他们的一个回调中启动了一个线程,并使用winAPI创建了自己的窗口。 (我有一个类似的问题) 我想在我的窗口上绘制那些RTT输出。因此,我尝试将曲面复制到我在自己的directx设备中创建的曲面/纹理中,该设备在我的窗口上绘制。 我在做这件事的时候发现了一些东西
我从他们的一个回调中启动了一个线程,并使用winAPI创建了自己的窗口。 (我有一个类似的问题)
我想在我的窗口上绘制那些RTT输出。因此,我尝试将曲面复制到我在自己的directx设备中创建的曲面/纹理中,该设备在我的窗口上绘制。
我在做这件事的时候发现了一些东西
- 使用
和D3DXSaveSurfaceToFileInMemory(…)
函数可以轻松完成此操作D3DXCreateTextureFromFileInMemory(…)
函数不适用于使用两个设备创建的两个曲面StrechRect(…)
MSDN说() 在Windows Vista中,CreateTexture可以从系统创建纹理 内存指针允许应用程序在使用时具有更大的灵活性, 分配和删除系统内存。例如,一个 应用程序可以传递GDI系统内存位图指针并获取 它周围的Direct3D纹理界面。使用系统内存指针 CreateTexture具有以下限制
- 纹理的间距必须等于宽度乘以每个像素的字节数
- 仅支持具有单个mipmap级别的纹理。Levels参数必须为1
- Pool参数必须是D3DPOOL\u SYSTEMMEM
- pSharedHandle参数必须是指向可容纳系统内存点的缓冲区的有效指针*pSharedHandle必须是有效的 指向系统内存的指针,其大小(以字节为单位)为纹理宽度* 纹理高度*纹理格式的每像素字节数
msdn在这里所说的有什么好的例子吗?如果你在vista/win7/win8中,你可以使用它,那么你不需要任何副本。你的两个曲面是创建两个进程还是一个进程?单进程,我通过回调启动了自己的线程,这样当用户发送特定命令打开它时,我的线程就会启动并显示窗口。我尝试锁定纹理表面(0级)和其他表面,并复制数据。好吧,那奏效了。但是我想知道
CreateTexture
有多好。根据MSDN页面,我必须传递一个void*
,它指向像素数据作为CreateTexture
函数的最后一个参数,rite?例如:void*\u pt;CreateTexture(宽度、高度、1、D3dAge\u动态、格式、D3DPOOL\u SYSTEMMEM和mytexture(句柄*)\u pt)代码>