2011-02-28 68 views
1

我试图在Delphi创建使用DirectX 9的纹理2007从位图或图形创建D3DX质地

我所知道的这些功能:

D3DXCreateTextureFromFile 
D3DXCreateTextureFromFileEx 
D3DXCreateTextureFromResource 
D3DXCreateTextureFromFileInMemory 

但我需要纹理是动态的(和快速)。有没有从TBitmap创建纹理的功能?

更多信息:
我的最终目标是使用DirectX来显示用户选择的视频。对DirectX的需求是在视频顶部叠加文本以及在用户选择下一个视频时在视频之间进行切换。我正在使用播放视频的组件,并为每个帧抽出一个位图,这就是我想用于纹理的内容。

回答

0

您可以简单地锁定D3D texture,然后在TBitmap.Handle上使用GetDIBits

然而,您正在浪费大量的处理时间。锁定纹理并直接将图像加载到D3D纹理上会好得多。

虽然这意味着使用外部图像加载lib。

您可能还会发现使用D3DXLoadSurfaceFromFile会显着加快速度,因为您不需要每次都创建纹理。只需抓住它的top-level surface并将纹理加载到它上面。

不管你做什么,然而,从磁盘加载像这样的单个帧将会很慢。硬盘加载将是最慢的部分。您可能会发现块将一组帧加载到内存中,然后在每帧中使用D3DXLoadSurfaceFromFileInMemory,而将另一个帧的图像块异步加载到内存中是最快的方法。