Revision: 41315
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 16, 2011 02:48 by aday
Initial Code
----------------------------------------- Direct3D.h ----------------------------------------
/* Esto se utilizará para poder manejar en cualquier programa la librerÃa gráfica.
Se han puesto en una clase aparte para obtener más portabilidad de este código. */
/* by Aday Melián Carrillo for the common knowledge */
#pragma once
#include "Singleton.h"
#include <d3d9.h>
#include <D3dx9core.h>
// Necesitaremos incluir en el Linker las siguientes librerÃas situadas en el directorio de DirectX:
//"d3d9.lib"
class ManejadorDirect3D : public Singleton<ManejadorDirect3D>
{
// Variables necesarias para el manejo de DirectX
LPDIRECT3D9 d3d; // Puntero a la interfaz Direct3D
LPDIRECT3DDEVICE9 d3ddev; // Puntero a la clase del dispositivo
// Variables para el texto
LPD3DXFONT pFuente;
public:
// Prototipos de función
void initD3D(HWND hWnd); // Inicializa Direct3D
LPDIRECT3DDEVICE9 GetDevice(void); // Obtenemos acceso al dispositivo de video
void StartRender(void); // Comienza el Renderizado
// En la aplicación, entre estas dos funciones añadiremos los diferentes renderizados.
void ManejadorDirect3D::Write(RECT rct, char *text, D3DCOLOR color); // Escribimos en pantalla
void StopRender(void); // Finaliza el renderizado actual
void cleanD3D(void); // Deinicializa Direct3D
};
----------------------------------------- Direct3D.cpp -------------------------------------
#include "Direct3D.h"
// Inicializa Direct3D
void ManejadorDirect3D::initD3D(HWND hWnd)
{
d3d = Direct3DCreate9(D3D_SDK_VERSION); // Creamos la interfaz Direct3D
D3DPRESENT_PARAMETERS d3dpp; // Creamos una estructura para guardar información de varios dispositivos
ZeroMemory(&d3dpp, sizeof(d3dpp)); // Vaciamos la estructura para su uso
d3dpp.Windowed = TRUE; // Hacemos que el programa se adapte a una ventana
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // Descartamos los frames que puedan haber
d3dpp.hDeviceWindow = hWnd; // Seleccionamos la ventana que utilizará Direct3D
// Creamos un dispositivo de clase utilizando toda la información anterior
d3d->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&d3ddev);
// Inicializamos la posibilidad de escribir fuentes
D3DXCreateFont( d3ddev, 20, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT("Arial"), &pFuente );
d3ddev->ShowCursor(true);
}
// Obtenemos acceso al dispositivo de video
LPDIRECT3DDEVICE9 ManejadorDirect3D::GetDevice(void){
return d3ddev;
}
void ManejadorDirect3D::Write(RECT rct, char *text, D3DCOLOR color)
{
D3DCOLOR fontColor = color;
// Escribimos el texto pasado por parámetro del color descrito
pFuente->DrawText(NULL, text, -1, &rct, 0, fontColor );
}
// Función de comienzo de renderizado
void ManejadorDirect3D::StartRender(void)
{
// Vaciamos la pantalla a un azúl profundo
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0);
d3ddev->BeginScene(); // Comenzamos la escena 3D
}
// Entre estas dos funciones hemos de ejecutar todos los renders en la aplicación principal
// Función para finalizar el renderizado.
void ManejadorDirect3D::StopRender(void)
{
d3ddev->EndScene(); // Finalizamos la escena 3D
d3ddev->Present(NULL, NULL, NULL, NULL); // Mostramos el frame que hemos preparado
}
// Función de deinicialización y limpieza de Direct3D y COM
void ManejadorDirect3D::cleanD3D(void)
{
pFuente->Release();
d3ddev->Release(); // Cerramos y liberamos el dispositivo Direct3D
d3d->Release(); // Cerramos y liberamos Direct3D
}
Initial URL
Initial Description
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! :)
Initial Title
Direct3D Easy Implementation
Initial Tags
Initial Language
C++