游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2008|回复: 3

深度缓存操作,急!!在线就解

[复制链接]

2

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-12-21 11:45:00 | 显示全部楼层 |阅读模式
我先通过
GetDepthStencilSurface 获得当前深度surface

然后想通过LockRect()和 UnlockRect()对其直接进行操作 不知道为什么只要一访问这片内存就会出错

求高手帮忙

代码如下:
                if(Moo::RenderTarget::pNewDS!=NULL)
                {
                        D3DSURFACE_DESC surfaceDesc;
                        D3DLOCKED_RECT lockedRect;
                        Moo::RenderTarget::pNewDS->GetDesc(&surfaceDesc);
                        Moo::RenderTarget::pNewDS->LockRect(&lockedRect,0,0);
                        DWORD* imageDate = (DWORD*)lockedRect.pBits;
                        int index;
                        for (UINT i=0;i < surfaceDesc.Width;i++)
                        {
                                for (UINT j=0;j<surfaceDesc.Height;j++)
                                {
                                        index=i*lockedRect.Pitch/4+j;
                                        if(j>10 && j<20)
                                             imageDate[index]=0x0;
                                }
                        }
                        Moo::RenderTarget::pNewDS->UnlockRect();
                }

                      说明一下深度缓冲格式是 d24x8
                      其中Moo::RenderTarget::pNewDS 是depthstencilsurface 指针

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-12-21 15:04:00 | 显示全部楼层

Re:深度缓存操作,急!!在线就解

创建depthstencil时要指定lockable标志,同时显卡必须支持lockable depthstencil

1

主题

51

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2008-12-29 10:19:00 | 显示全部楼层

Re:深度缓存操作,急!!在线就解

只有D16Lockable的格式是可以锁定的
所有的函数都需要检查返回值,你连这么重要的返回值都不做检查,就上来问,说明你根本就没有用心用脑去做,还像一个小学生样的不懂就问。
建议你,把你用到的每个函数的文档完整看一遍

3

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
发表于 2009-1-25 13:57:00 | 显示全部楼层

Re:深度缓存操作,急!!在线就解

楼上正解,
使用D3DFMT_D16就可以了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 11:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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