如何通过提供参考发送D3D设备(DirectX / C ++编程)

时间:2011-06-12 12:00:10

标签: c++ pointers directx directx-9

H1。 我正在尝试将我的代码转换为不同的 .cpp .h 文件,以便查找,查看和理解更轻松。以下是我现在要做的事情:我得到了一个 Meshes.cpp ,这是我的主要 .cpp 源文件。在渲染功能(渲染())中,我必须调用名为 SetupMatrices 的函数:

这是我的“ d3dGeneral.cpp ”文件:

// Begining of the "d3dGeneral.cpp"
    #include "DXUT.h"

    VOID SetupMatrices( LPDIRECT3DDEVICE9 *PDev )
    {
        D3DXMATRIXA16 matProj;
        D3DXMatrixPerspectiveFovLH( &matProj,
                                    D3DX_PI / 4,
                                    1.777777777777778f,
                                    1.0f,
                                    1000.0f );    
        PDev->SetTransform( D3DTS_PROJECTION, &matProj ); // The problem is here......
    }
//Enging of the "d3dGeneral.cpp" 

这是我的“ Meshes.cpp ”文件:(哪个是主cpp文件)

// Begining of the "Meshes.cpp" file.
#include "DXUT.h"
#include "XMesh.h"
#include "Camera.h"
#include "d3dGeneral.cpp"

...
...
//Usualy SetupMatrices is found here.
...
...

VOID Render()
{
    SetupMatrices( &g_pd3dDevice );
    ...
    ...
    ...
}
INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, int nCmdShow)
{
    ...
    ...
    ...
    Render();
    ...
    ...
    ...
}
// End of the "Meshes.cpp" file

名为 DXUT.h 的头文件包含其他常规包含。 所以,当我这样做时,我收到一个错误:

错误2错误C2227:左侧' - > SetTransform'必须指向类/ struct / union / generic类型c:\ users \ catt \ desktop \ deneme \ d3dgeneral.cpp 74 MeshClass

我知道这意味着什么,但我找不到如何避免它。看起来我的指针有问题。我还试着像这样使用PDev:

*PDev->SetTransform( D3DTS_PROJECTION, &matProj );  // ???

我知道我不必在该函数中使用带引用的d3dDevice,但我还有一个函数清理。我想我需要为它提供参考,因为它必须清理真正的设备本身而不是它的副本8)。我希望我能正确解释自己。如果你可以帮助我那将是非常棒的。谢谢你抽出时间......

2 个答案:

答案 0 :(得分:3)

你试过这个:

(*PDev)->SetTransform( D3DTS_PROJECTION, &matProj ); 

答案 1 :(得分:2)

LPDIRECT3D9DEVICE 已经指针。你不需要指向它的指针。只需按值LPDIRECT3D9DEVICE

当然,我个人更喜欢使用IDirect3D9Device*,因为它更清晰,此外,我喜欢将原始指针存储在智能指针中。