Как отправить устройство D3D, указав ссылку (блокирование DirectX / C )

#c #pointers #directx #directx-9

#c #указатели #directx #directx-9

Вопрос:

H1. Я пытаюсь перенести свои коды в разные файлы .cpp и .h, чтобы упростить их поиск, просмотр и понимание. Вот что я пытаюсь сделать сейчас: я получилMeshes.cpp это мой основной исходный файл .cpp. В функции рендеринга ( Render() ) я должен вызвать функцию с именем SetupMatrices:

Это мой «d3dGeneral.cpp «файл:

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

    VOID SetupMatrices( LPDIRECT3DDEVICE9 *PDev )
    {
        D3DXMATRIXA16 matProj;
        D3DXMatrixPerspectiveFovLH( amp;matProj,
                                    D3DX_PI / 4,
                                    1.777777777777778f,
                                    1.0f,
                                    1000.0f );    
        PDev->SetTransform( D3DTS_PROJECTION, amp;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( amp;g_pd3dDevice );
    ...
    ...
    ...
}
INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, int nCmdShow)
{
    ...
    ...
    ...
    Render();
    ...
    ...
    ...
}
// End of the "Meshes.cpp" file
  

Файл заголовка с именем DXUT.h содержит другие общие включения.
Итак, когда я делаю это, я получаю сообщение об ошибке:

Ошибка 2 ошибка C2227: слева от ‘-> setTransform’ должен указывать класс / структура / объединение / универсальный тип c:userscattdesktopdenemed3dgeneral.cpp 74 Сетчатый класс

Я знаю, что это значит, но я не могу найти, как этого избежать. Похоже, у меня проблема с указателями. Также я пытался использовать PDev следующим образом:

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

Я знаю, что мне не обязательно использовать d3dDevice со ссылкой в этой функции, но у меня также есть функция очистки. Я думаю, мне нужно дать ссылку на это, потому что это должно очистить само реальное устройство, а не его копию 8). Надеюсь, я правильно объяснил себя. Если вы сможете мне помочь, это будет потрясающе. Спасибо, что уделили свое время…

Ответ №1:

Вы пробовали это:

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

Ответ №2:

LPDIRECT3D9DEVICE это уже указатель. Вам не нужен указатель на него. Просто возьмите LPDIRECT3D9DEVICE по значению.

Конечно, я лично предпочитаю использовать IDirect3D9Device* , поскольку это понятнее, и, кроме того, мне нравится хранить исходный указатель в интеллектуальном указателе.

Комментарии:

1. Спасибо за ответ. Я попытался использовать его без указателя: тогда он говорит, что произошла ошибка при переписке… Возможно, я что-то сделал… То, что сказал Джем Кальонку, сработало для меня.