Return to Snippet

Revision: 41315
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++