游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: 微无渊

[DX9]如何将后台缓冲拷贝到IDirect3DTexture9里??

[复制链接]

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-4-23 00:04:00 | 显示全部楼层

Re: Re:[DX9]如何将后台缓冲拷贝到IDirect3DTexture9里??

DraculaLin: Re:[DX9]如何将后台缓冲拷贝到IDirect3DTexture9里??

看到了你要的目的差点晕倒
神经病...杀鸡用牛刀

一行代码就解决了  直接画一张全黑的到最上层
然后控制alpha值 就是淡入淡出效果了


50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-4-23 09:29:00 | 显示全部楼层

Re: [DX9]如何将后台缓冲拷贝到IDirect3DTexture9里??

解决了,奉上代码:


  1. {
  2.         IDirect3DSurface9* pRenderTargete = NULL;
  3.         pD3DDevice->GetRenderTarget(0, &pRenderTargete);

  4.         ID3DXBuffer* pBuffer = NULL;
  5.         D3DXSaveSurfaceToFileInMemory(&pBuffer, D3DXIFF_TGA, pRenderTargete, NULL, NULL);

  6.         IDirect3DTexture9* pTexture = NULL;
  7.         if (FAILED(D3DXCreateTextureFromFileInMemoryEx(
  8.                 pD3DDevice,
  9.                 pBuffer->GetBufferPointer(), pBuffer->GetBufferSize(),
  10.                 1024, 768,
  11.                 0,                        // Mip levels
  12.                 0,                        // Usage
  13.                 D3DFMT_A8R8G8B8,        // Format
  14.                 D3DPOOL_MANAGED,        // Memory pool
  15.                 D3DX_FILTER_NONE,        // Filter
  16.                 D3DX_DEFAULT,                // Mip filter
  17.                 0,                        // Color key
  18.                 NULL, NULL,
  19.                 &pTexture ) ) )
  20.         {
  21.                 MessageBoxA(0, "纹理创建失败!", 0, MB_OK);
  22.                 return;
  23.         }

  24.         D3DXSaveTextureToFileA("out.png", D3DXIFF_PNG, pTexture, NULL);

  25.         pBuffer->Release();
  26.         pTexture->Release();
  27.         pRenderTargete->Release();
  28. }
复制代码


感谢CSDN::AnsonYao

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2012-4-23 17:31:00 | 显示全部楼层

Re: Re: Re:[DX9]如何将后台缓冲拷贝到IDirect3DTexture9里??

微无渊: Re: Re:[DX9]如何将后台缓冲拷贝到IDirect3DTexture9里??




IDirect3DSurface9* pRenderTargete = NULL;
pD3DDevice->GetRenderTarget(0, &pRenderTarge...


仔细阅读下这个函数的文档,是你的用法不对!!这个函数要求Surface尺寸和格式完全一致才能成功....

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-4-23 18:47:00 | 显示全部楼层

Re: Re: Re: Re:[DX9]如何将后台缓冲拷贝到IDirect3DTexture9里??

artint: Re: Re: Re:[DX9]如何将后台缓冲拷贝到IDirect3DTexture9里??



仔细阅读下这个函数的文档,是你的用法不对!!这个函数要求Surface尺寸和格式完全一致才能成功....


用了GetDisplayMode(),发现格式的确和屏幕不一样。改正后成功了。也能正确拷贝到纹理中。
多谢提醒。

0

主题

27

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2012-4-23 23:10:00 | 显示全部楼层

Re:[DX9]如何将后台缓冲拷贝到IDirect3DTexture9里??

我也同意:杀鸡用牛刀了。 ~ .~
使用渲染到纹理的方式会比你读取缓存要快,不过都切换场景了,这点时间谁会在意,是吧。
D3DXSaveTextureToFileA调用它干嘛?难道是保存截屏,然后图片处理。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-28 12:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表