我可以使用gdi+;图像为directx9纹理,无复制开销

我可以使用gdi+;图像为directx9纹理,无复制开销,directx,gdi+,directx-9,Directx,Gdi+,Directx 9,我有一个jpeg图片流(25fps,大约1000x700),我想以尽可能少的CPU使用量在屏幕上渲染它 现在我找到了一种快速解压jpeg图像的方法——它是gdi+api。在我的机器上,每帧大约需要50纳秒。我不知道他们是如何做到这一点的,但这是真的,例如libjpeg8就比我们记忆中要慢得多 我曾尝试使用gdi+输出一张拉伸的图片,但对于这样一个简单的工作,它使用了太多的CPU。所以我换成了directx9。这对我来说很好,但我找不到一个好方法将gdi+图片转换为directx9纹理 有很多方法

我有一个jpeg图片流(25fps,大约1000x700),我想以尽可能少的CPU使用量在屏幕上渲染它

现在我找到了一种快速解压jpeg图像的方法——它是gdi+api。在我的机器上,每帧大约需要50纳秒。我不知道他们是如何做到这一点的,但这是真的,例如libjpeg8就比我们记忆中要慢得多

我曾尝试使用gdi+输出一张拉伸的图片,但对于这样一个简单的工作,它使用了太多的CPU。所以我换成了directx9。这对我来说很好,但我找不到一个好方法将gdi+图片转换为directx9纹理

有很多方法可以做到这一点,它们都很慢,CPU使用率也很高

其中一项:

  • 从纹理获取表面
  • 从曲面获取hdc
  • 从hdc创建gdi+图形
  • 不拉伸绘制(平面API绘制)
  • 另一种方式:

  • 锁定图像的位
  • 锁片表面
  • 复制位
  • 顺便说一下,
    D3DXCreateTextureFromFileInMemory
    速度很慢


    问题是如何在没有复制开销的情况下使用图像作为纹理?或者,将图像转换为纹理的最佳方式是什么?

    您几乎没有选择,gdi图像将存储在pc主内存中,而纹理通常存储在图形卡内存中,因此,在某个时候,必须进行复制。我猜到了,那么如何快速复制,就像普通的memcpy一样?到目前为止,复制大约4Mb的内存需要10毫秒。像素格式有问题吗?顺便说一句,gdi+拉伸绘图与不拉伸绘图只需10毫秒,这不是很奇怪吗?不要在每一帧都重新创建纹理?@VincentPovirk我不会。我只测量了将图像转换为纹理的时间。是的,
    D3DXCreateTextureFromFileInMemory
    创建纹理,但没有选项,d3dx api无法将jpeg加载到现有纹理中。