游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2081|回复: 5

诡异问题。。关于色彩填充

[复制链接]

6

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
QQ
发表于 2009-11-25 15:21:00 | 显示全部楼层 |阅读模式
在很多台电脑上实验 只有一台有问题 附件里左边是正常的显示 右边就是那台电脑的诡异显示 = =!?

这咋回事? 数据在渲染前点的位置和颜色都是正常的
经过N多排除测试偶发现个问题。。。但无法理解 问题就在把数据拷贝到VertexBuffer
有两种代码 一种可以正常显示颜色 而我的就不行


struct CUSTOMVERTEX
{
    FLOAT x, y, z, rhw;
    DWORD color;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)  //顶点格式
LPDIRECT3DVERTEXBUFFER9 g_pVB        = NULL;    //顶点缓冲区对象

      CUSTOMVERTEX vertices[] =  {... }; // 一个矩形坐标

      VOID* pVertices;
      if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
          return E_FAIL;
      memcpy( pVertices, vertices, sizeof(vertices) );
      g_pVB->Unlock();

这种填充就能正常 我和他的区别就在于点的数据。。但我觉得应该是一样的。。

class CGI2DPoint
{
public:
    CGI2DPoint( void );
    ~CGI2DPoint( void );

public:
    enum{
        FVF_FORMAT = D3DFVF_XYZRHW,
        POINT_SIZE = sizeof( float ) * 4,

        ENUM_FORCE_COMPILATION
    };

public:
    inline void Move( const float fOffsetX, const float fOffsetY )
    {
        GI2DPointMove( &m_fX, &m_fY, fOffsetX, fOffsetY );
    }

    inline void Scale( const float fScaleX, const float fScaleY )
    {
        GI2DPointScale( &m_fX, &m_fY, fScaleX, fScaleY );
    }

    inline void Rotate( const float fRadian )
    {
        GI2DPointRotate( &m_fX, &m_fY, fRadian );
    }

    inline void Rotate( const float fRadian, const float fCenterX, const float fCenterY )
    {
        GI2DPointRotate( &m_fX, &m_fY, fRadian, fCenterX, fCenterY );
    }

    inline void SetX( const float fX ) { m_fX = fX; }
    inline float GetX( void ) { return ( m_fX ); }

    inline void SetY( const float fY ) { m_fY = fY; }
    inline float GetY( void ) { return ( m_fY ); }

    inline void SetPos( const float fX, const float fY ) { m_fX = fX; m_fY = fY; }

private:
    float m_fX;
    float m_fY;
    float m_fZ;
    float m_fRhw;
};


class CGI2DDiffusePoint : public CGI2DPoint
{
public:
    CGI2DDiffusePoint( void );
    ~CGI2DDiffusePoint( void );

public:
    enum{
        FVF_FORMAT = CGI2DPoint::FVF_FORMAT | D3DFVF_DIFFUSE,
        POINT_SIZE = CGI2DPoint:OINT_SIZE + sizeof( dword ),

        ENUM_FORCE_COMPILATION
    };

public:
    inline void SetColor( const dword dwColor ) { m_dwColor = dwColor; }
    inline dword GetColor( void ) { return ( m_dwColor ); }

private:
    dword m_dwColor;
};


      CGI2DDiffusePoint *pData = new CGI2DDiffusePoint[ 4 ]

      ......//填充个矩形坐标

      VOID* pVertices;
      if( FAILED( g_pVB->Lock( 0, 4 * CGI2DDiffusePoint::POINT_SIZE, (void**)&pVertices, 0 ) ) )
          return E_FAIL;
      memcpy( pVertices, pData, 4 * CGI2DDiffusePoint::POINT_SIZE );
      g_pVB->Unlock();

我这样在那台电脑上就成了附件右边的状态。。。。其他电脑都是正常。。。。
各位大大 到底咋回事  =  =  内存里的东东都是一样的
创建没问题

      if( FAILED( m_pDevice->CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX),
          0, D3DFVF_CUSTOMVERTEX,
          D3DPOOL_MANAGED, &g_pVB, NULL ) ) )
      {
          return E_FAIL;
      }

渲染也米问题
     m_pDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
     m_pDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
     m_pDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );

配置:
系统是32位XP SP3









今天又发现了另一台电脑 笔记本 集成显卡
区别是不支持D3DCREATE_HARDWARE_VERTEXPROCESSING
只能用D3DCREATE_SOFTWARE_VERTEXPROCESSING
连QueryPerformanceFrequency都不支持。。
显示的方块是:



配置:

系统也是32位XP SP3






86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2009-11-25 15:53:00 | 显示全部楼层

Re:诡异问题。。关于色彩填充

硬件是啥,也不说说~

6

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
QQ
 楼主| 发表于 2009-11-25 17:11:00 | 显示全部楼层

Re:诡异问题。。关于色彩填充

呃 =  =
不好意思 朋友还没上线 晚上补齐详细硬件资料

6

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
QQ
 楼主| 发表于 2009-11-25 19:55:00 | 显示全部楼层

Re:诡异问题。。关于色彩填充

更新了配置 0  0
各位大大看看 0 0

6

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
QQ
 楼主| 发表于 2009-11-25 22:51:00 | 显示全部楼层

Re:诡异问题。。关于色彩填充

追加测试报告 目前 64位WIN7 32位XP SP2 32位XP SP3(除了以上两台)都运行正常。。。
偶要崩溃了 =   =。。。。。

0

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2009-11-27 01:04:00 | 显示全部楼层

Re:诡异问题。。关于色彩填充

我也试过类似的情况,晕死。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-14 17:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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