游戏开发论坛

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

为何用IDirect3DTexture9的LockRect()写入的像素无法被渲染?

[复制链接]

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2010-9-4 21:54:00 | 显示全部楼层 |阅读模式
void CRender::InitData()
{
    D3DXCreateTexture(m_pD3DDevice,1024, 768, D3DX_DEFAULT, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_pTexture);

    m_pImgData = new unsigned char[1024*768*4];
   
    // 自定义的1024*768的红色像素数据
    for (int i=0; i<1024*768*4; )
    {
        m_pImgData[i++] = 255;  // alpha
        m_pImgData[i++] = 255;  // red
        m_pImgData[i++] = 0;    // green
        m_pImgData[i++] = 0;    // blue
    }

    HRESULT hr = D3DXCreateTexture(m_pD3DDevice,1024, 768, D3DX_DEFAULT, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_pTexture);
    if (FAILED(hr))    return;

    D3DLOCKED_RECT lrDst;
    m_pTexture->LockRect(0, &lrDst, 0, 0);

    lrDst.pBits = m_pImgData;

    m_pTexture->UnlockRect(0);
}

// 负责渲染的两个关键代码
m_pD3DDevice->SetTexture(0, m_pTexture);
m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, &objData, sizeof(SVertex2D));


我这个像素的写入方式不对么??
怎么回事,为什么渲染不出红色来??

85

主题

824

帖子

878

积分

高级会员

Rank: 4

积分
878
QQ
发表于 2010-9-5 08:03:00 | 显示全部楼层

Re: 为何用IDirect3DTexture9的LockRect()写入的像素无法被渲染?

晕,你只改了指针而已,当然渲染不出来 [em17]

1

主题

266

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
发表于 2010-9-5 10:56:00 | 显示全部楼层

Re:为何用IDirect3DTexture9的LockRect()写入的像素无法被渲染?

楼上说的对。

你应该:
unsigned char *pData; // 操作用指针
m_pTexture->LockRect(0, &lrDst, 0, 0);
pData = (unsigned char *)lrDst.pBits; // 取得像素地址
然后:
for(int i=0; i<1024*768*4; ) // 指针已经指向实际像素地址
{
    pData[i++] = 255;  // alpha
    pData[i++] = 255;  // red
    pData[i++] = 0;    // green
    pData[i++] = 0;    // blue
}
最后:
m_pTexture->UnlockRect(0);

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-9-5 22:38:00 | 显示全部楼层

Re: Re:为何用IDirect3DTexture9的LockRect()写入的像素无法被渲染?

onemoo: Re:为何用IDirect3DTexture9的LockRect()写入的像素无法被渲染?

楼上说的对。

你应该:
unsigned char *pData; // 操作用指针
m_pTexture->LockRect(0, &lrDst...


你怎么跑到CSDN把我的代码复制过来了 [em17]
不过你复制错了,
应该是:
for (int i = 0; i < 768; i++)
    {   
        for (int j = 0; j < 1024; j++)
        {
            int index = i * lrect.Pitch/4 + j;
   
            pDest[index] = 0xffff0000;
        }
    }

已经KO了。  [em13]

1

主题

266

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
发表于 2010-9-8 10:15:00 | 显示全部楼层

Re: Re: Re:为何用IDirect3DTexture9的LockRect()写入的像素无法被

轩辕崇正: Re: Re:为何用IDirect3DTexture9的LockRect()写入的像素无法被渲染?



你怎么跑到CSDN把我的代码复制过来了 [em17]
不过你复制错了,
应该是:
for (int i = 0; i < 76...

我可不是复制的额...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-6 14:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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