2011-01-14 3 views
4

Dans le passé, j'ai créé des applications DirectX dans le langage de programmation C++, cependant, je voudrais savoir s'il est possible de le faire en utilisant le langage de programmation C.Programmation DirectX en C?

Merci.

+0

Y a-t-il une raison à la restriction C-only? –

Répondre

10

Oui, c'est possible. DirectX expose une interface COM et C est capable de les consommer. Ce ne sera pas un chargement de bateau entier de plaisir si!

+1

J'ai essayé. Vous vous y êtes habitué, mais ce n'est toujours pas agréable ou facile. – dreamlax

+0

Cette façon de faire est également possible, mais comme David l'a mentionné, ce ne sera pas amusant du tout. Bonne chance si vous essayez de prendre cette route. –

0

Je pense que les bibliothèques DirectX ont des composants uniquement C++ (ça fait longtemps que je ne l'ai pas utilisé et je me souviens depuis toujours qu'il contient des classes). Pourrait aussi vous rendre la vie un peu plus facile et le faire en C++.

+2

Vous pouvez tout faire avec COM. –

+0

Juste parce que vous pouvez ne signifie pas que vous devriez parfois. Bien que s'il voudrait alors il peut aller droit devant hehe. –

+0

@Jesus hehe en effet. J'ai récemment dû implémenter une interface COM en C. Cela m'a fait mal à la tête. –

2

Vous pouvez utiliser DirectX dans C. Il a des macros spécifiques pour simplifier l'utilisation de l'interface COM. Cependant, il est beaucoup plus facile d'utiliser C++.

5

Le compilateur Open Watcom C/C++ est livré avec des exemples d'applications DirectX en C++ et C. Les deux fonctionnent. Ils sont respectivement sous WATCOM\samples\directx\cpp et WATCOM\samples\directx\c dans OW 1.9.

C'est ce que le code ressemble en C++:

hr = d3d->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3dcaps9); 
hr = d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm); 
hr = d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, game_window, D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, &d3dpp, &d3d_dev); 

Et dans C:

hr = IDirect3D9_GetDeviceCaps(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3dcaps9); 
hr = IDirect3D9_GetAdapterDisplayMode(d3d, D3DADAPTER_DEFAULT, &d3ddm); 
hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, game_window, D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, &d3dpp, &d3d_dev); 

Vous n'avez pas besoin de faire quelque chose de spécial avec COM en C comme il semble y avoir suffisamment de macros définies que vous pouvez simplement utiliser.