我试图在Delphi 2007中使用DirectX 9创建纹理。
我知道这些功能:
D3DXCreateTextureFromFile
D3DXCreateTextureFromFileEx
D3DXCreateTextureFromResource
D3DXCreateTextureFromFileInMemory
但我需要纹理动态(和快速)。是否有从TBitmap创建纹理的功能?
更多信息:
我的最终目标是使用DirectX显示用户选择的视频。对DirectX的需求是在视频之上叠加文本以及在用户选择下一个视频之间转换视频。我正在使用播放视频的组件并为每个帧抽出一个位图,这就是我想要用于纹理的内容。
答案 0 :(得分:0)
您只需锁定D3D texture,然后在GetDIBits上使用TBitmap.Handle即可。
然而,你正在浪费大量的处理时间。锁定纹理并直接将图像加载到D3D纹理上会好得多。
这确实意味着使用外部图像加载lib。
您可能还会发现使用D3DXLoadSurfaceFromFile要快得多,因为您不需要每次都创建纹理。只需抓住它的top-level surface并将纹理加载到它上面。
无论你做什么,从磁盘加载这样的单个帧都会很慢。硬盘加载将是最慢的部分。您可能会发现块将一组帧加载到内存中,然后在每帧中使用D3DXLoadSurfaceFromFileInMemory,而异步将另一帧图像加载到内存中是最快的方法。