Direct3D Easy Implementation


/ Published in: C++
Save to your folder(s)

You have to link to ""d3d9.lib" and include the SDK folder on project settings.
This code works using DirectX SDK (June 2010).
I made it on a Singleton to make the access to it easier.
Comments in spanish because I'm spanish.
Be happy! :)


Copy this code and paste it in your HTML
  1. ----------------------------------------- Direct3D.h ----------------------------------------
  2. /* Esto se utilizará para poder manejar en cualquier programa la librería gráfica.
  3. Se han puesto en una clase aparte para obtener más portabilidad de este código. */
  4.  
  5. /* by Aday Melián Carrillo for the common knowledge */
  6.  
  7. #pragma once
  8. #include "Singleton.h"
  9. #include <d3d9.h>
  10. #include <D3dx9core.h>
  11. // Necesitaremos incluir en el Linker las siguientes librerías situadas en el directorio de DirectX:
  12. //"d3d9.lib"
  13.  
  14. class ManejadorDirect3D : public Singleton<ManejadorDirect3D>
  15. {
  16. // Variables necesarias para el manejo de DirectX
  17. LPDIRECT3D9 d3d; // Puntero a la interfaz Direct3D
  18. LPDIRECT3DDEVICE9 d3ddev; // Puntero a la clase del dispositivo
  19. // Variables para el texto
  20. LPD3DXFONT pFuente;
  21.  
  22. public:
  23. // Prototipos de función
  24. void initD3D(HWND hWnd); // Inicializa Direct3D
  25. LPDIRECT3DDEVICE9 GetDevice(void); // Obtenemos acceso al dispositivo de video
  26. void StartRender(void); // Comienza el Renderizado
  27. // En la aplicación, entre estas dos funciones añadiremos los diferentes renderizados.
  28. void ManejadorDirect3D::Write(RECT rct, char *text, D3DCOLOR color); // Escribimos en pantalla
  29. void StopRender(void); // Finaliza el renderizado actual
  30. void cleanD3D(void); // Deinicializa Direct3D
  31. };
  32.  
  33. ----------------------------------------- Direct3D.cpp -------------------------------------
  34.  
  35.  
  36. #include "Direct3D.h"
  37.  
  38. // Inicializa Direct3D
  39. void ManejadorDirect3D::initD3D(HWND hWnd)
  40. {
  41. d3d = Direct3DCreate9(D3D_SDK_VERSION); // Creamos la interfaz Direct3D
  42.  
  43. D3DPRESENT_PARAMETERS d3dpp; // Creamos una estructura para guardar información de varios dispositivos
  44.  
  45. ZeroMemory(&d3dpp, sizeof(d3dpp)); // Vaciamos la estructura para su uso
  46. d3dpp.Windowed = TRUE; // Hacemos que el programa se adapte a una ventana
  47. d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // Descartamos los frames que puedan haber
  48. d3dpp.hDeviceWindow = hWnd; // Seleccionamos la ventana que utilizará Direct3D
  49.  
  50. // Creamos un dispositivo de clase utilizando toda la información anterior
  51. d3d->CreateDevice(D3DADAPTER_DEFAULT,
  52. D3DDEVTYPE_HAL,
  53. hWnd,
  54. D3DCREATE_SOFTWARE_VERTEXPROCESSING,
  55. &d3dpp,
  56. &d3ddev);
  57.  
  58. // Inicializamos la posibilidad de escribir fuentes
  59. D3DXCreateFont( d3ddev, 20, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT("Arial"), &pFuente );
  60. d3ddev->ShowCursor(true);
  61. }
  62.  
  63. // Obtenemos acceso al dispositivo de video
  64. LPDIRECT3DDEVICE9 ManejadorDirect3D::GetDevice(void){
  65. return d3ddev;
  66. }
  67.  
  68. void ManejadorDirect3D::Write(RECT rct, char *text, D3DCOLOR color)
  69. {
  70. D3DCOLOR fontColor = color;
  71. // Escribimos el texto pasado por parámetro del color descrito
  72. pFuente->DrawText(NULL, text, -1, &rct, 0, fontColor );
  73. }
  74.  
  75. // Función de comienzo de renderizado
  76. void ManejadorDirect3D::StartRender(void)
  77. {
  78. // Vaciamos la pantalla a un azúl profundo
  79. d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0);
  80. d3ddev->BeginScene(); // Comenzamos la escena 3D
  81.  
  82. }
  83.  
  84. // Entre estas dos funciones hemos de ejecutar todos los renders en la aplicación principal
  85.  
  86. // Función para finalizar el renderizado.
  87. void ManejadorDirect3D::StopRender(void)
  88. {
  89. d3ddev->EndScene(); // Finalizamos la escena 3D
  90. d3ddev->Present(NULL, NULL, NULL, NULL); // Mostramos el frame que hemos preparado
  91. }
  92.  
  93.  
  94.  
  95. // Función de deinicialización y limpieza de Direct3D y COM
  96. void ManejadorDirect3D::cleanD3D(void)
  97. {
  98. pFuente->Release();
  99. d3ddev->Release(); // Cerramos y liberamos el dispositivo Direct3D
  100. d3d->Release(); // Cerramos y liberamos Direct3D
  101. }

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.