游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3539|回复: 4

请问各位高手:为何SetRenderTarget之后没有效果??

[复制链接]

7

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2010-8-22 15:16:00 | 显示全部楼层 |阅读模式
小弟做的是Hook游戏:在每一个次执行DrawPrimitive或者DrawIndexedPrimitive里面

第一步:获得当前的渲染目标
d3d_device->GetRenderTarget(0,&render_target);

第二步:新建一个相同的渲染对象:
D3DSURFACE_DESC Desc;
render_target->GetDesc(&Desc);
d3d_device->CreateTexture(Desc.Width, Desc.Height, 1, Desc.Usage, Desc.Format, Desc.Pool, &texture,NULL);
texture->GetSurfaceLevel(0,&new_target);

第三步:
d3d_device->SetRenderTarget(0,new_target);
DrawPrimitive或者DrawIndexedPrimitive

d3d_device->SetRenderTarget(0,render_target);
DrawPrimitive或者DrawIndexedPrimitive

执行过后,在一些游戏里new_target是正常的,但是在一些游戏里new_target就总是空的。

用D3DXSaveSurfaceToFile保存截图,可以看到render_target是一个正常的图像,
而我自己申请的new_target就是一片黑。

请问各位高手这可能是什么原因呢?



[em17]

7

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2010-8-22 15:20:00 | 显示全部楼层

Re: SetRenderTarget之后没有效果

补充一下:我额外创建了new_target的深度缓冲,在每次draw的时候,是切换了的。
可以排除深度缓冲的影响。

d3d_device->SetRenderTarget(0,new_target);
(设置new_target自己的depth buffer)
DrawPrimitive或者DrawIndexedPrimitive

d3d_device->SetRenderTarget(0,render_target);
(设置render_target自己的depth buffer)
DrawPrimitive或者DrawIndexedPrimitive

[em4]

6

主题

72

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2010-8-23 17:38:00 | 显示全部楼层

Re:请问各位高手:为何SetRenderTarget之后没有效果??

LZ是想把场景绘制到纹理里面是把?
我猜是CreateTexture函数里有几个参数弄错了,把第4个参数改成D3DUSAGE_RENDERTARGET,第5个参数改成D3DFMT_R5G6B5,第六个参数改成D3DPOOL_DEFAULT再试试?

6

主题

72

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2010-8-23 17:39:00 | 显示全部楼层

Re:请问各位高手:为何SetRenderTarget之后没有效果??

错了,第五个参数改成D3DFMT_A8R8G8B8,不是D3DFMT_R5G6B5。

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2011-3-23 10:48:00 | 显示全部楼层

Re: 请问各位高手:为何SetRenderTarget之后没有效果??

判断一下clear函数的调用成功了没有.....我原来遇到同样的问题。是clear函数没成功。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-14 08:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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