游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4751|回复: 2

前天刚接触D3D9,请教一下关于StretchRect的问题

[复制链接]

1

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2006-6-18 02:54:00 | 显示全部楼层 |阅读模式
我想知道的是,既然创建DeviceObject时默认的BackBuffer不能被Lock,那么StretchRect是如何将图像数据拷贝进BackBuffer并且使其能够被Present的?由此引申出来另一个问题——我能够在窗口模式下直接操作BackBuffer的数据吗?将渲染全部做到一个Offscreen buffer里然后再StretchRect整个区域过去似乎并不是一个很有效率的方法,我猜想StretchRect的调用并不是必须的,也许我可以效仿StretchRect的部分功能以写入BackBuffer,请问我应该怎么做?

补充:这里说的BackBuffer是由IDirect3DDevice9->GetBackBuffer返回的表面

        xor        ebx,ebx
        mov        ecx,ID3D9Device
        lea        eax,IBackBuffer
        push        eax
        mov        edx,[ecx]
        push        ebx
        push        ebx
        push        ebx
        push        ecx
        call        DWORD PTR[edx + Device_GetBackBuffer]
        mov        ecx,IBackBuffer
        push        D3DLOCK_DISCARD
        mov        edx,[ecx]
        push        ebx
        lea        eax,lockRect
        push        eax
        push        ecx
        call        DWORD PTR[edx + Surface_LockRect]
        int 3         ;此处看到返回错误了

37

主题

180

帖子

180

积分

注册会员

Rank: 2

积分
180
发表于 2006-6-18 06:30:00 | 显示全部楼层

Re: 前天刚接触D3D9,请教一下关于StretchRect的问题

@@ 你确定不能lock吗.好像是可以的...
而且用StretchRect好像不用lock

想想你设定rendertaget时
不是也是画到纹理上面..

然后贴上平面

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-6-18 10:35:00 | 显示全部楼层

Re:前天刚接触D3D9,请教一下关于StretchRect的问题

BackBuffer和RenderTarget之所以不能Lock是因为它在显存中,StretchRect之所以能够访问它们是因为该操作是由GPU完成的而非CPU,你做一下性能测试就知道了,StretchRect远快于LoadSurfaceFromSurface,如果硬件不支持的话StretchRect就会失败,D3DCAPS中有专门的能力位用于检测拉伸时的纹理过滤能力StretchRectFilterCaps
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 19:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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