Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: CoLSoN2 en 11 de Noviembre de 2002, 01:29:42 AM

Título: Fuentes con ID3DXFont
Publicado por: CoLSoN2 en 11 de Noviembre de 2002, 01:29:42 AM
                                Mientras me curro un gestor de fuentes por sprites más curradillo, quiero hacer funcionar este metodo, pero, aun siendo la cosa mas simple delmundo, me falla. La cuestion es que me peta en ejecucion al hacer el D3DXCreateFont.


bool W3C_GFX_Font::Init(IDirect3DDevice8 *dev, HFONT handle, D3DCOLOR fcolor,

     float X1, float Y1, float X2, float Y2)

{

rect->left = (long)X1;

rect->right = (long)X2;

rect->top = (long)Y1;

rect->top = (long)Y2;



if (FAILED(D3DXCreateFont(dev,handle,&font))) // aqui peta

 return false;

return true;

}


dev es el device, bien creado ( a no ser que se necesite algo para hacer funcionar esto ..). font es un puntero a ID3DXFont. Y handle es un HFONT, que obtengo con (HFONT)GetStockObject(SYSTEM_FONT) en ejecucion.

Tambien he probado con D3DXCreateFontIndirect, ppero etaba igual. Alguien sabe ke leches pasa? o_O                                
Título: Fuentes con ID3DXFont
Publicado por: Kriller en 11 de Noviembre de 2002, 03:29:46 PM
                                Eeeeh, pues no sé si será una errata pero por si acaso, cambia esta línea:

rect->top = (long)Y2;    (es la cuarta dentro de la función)

por esta otra:

rect->bottom = (long)Y2;

Vamos, cambia el "top" por "bottom", a ver si es eso.                                
Título: hmnm
Publicado por: CoLSoN2 en 11 de Noviembre de 2002, 07:15:08 PM
                                si, estaba mal eso. Pero peta en la creacion, y en la creacion el RECT no interviene para nada, es durante el render. :                                
Título: Fuentes con ID3DXFont
Publicado por: metaxas en 11 de Noviembre de 2002, 09:15:09 PM
                                Para crear la fuente yo uso la función D3DXCreateFontIndirect, con ayuda de la estructura LOGFONT:

LOGFONT logFont;



logFont.lfHeight = dwHeight;

logFont.lfWidth  = 0;

logFont.lfEscapement = 0;

logFont.lfOrientation = 0;

logFont.lfWeight = FW_BOLD;

logFont.lfItalic = FALSE;

logFont.lfUnderline = FALSE;

logFont.lfStrikeOut = FALSE;

logFont.lfCharSet = ANSI_CHARSET;

logFont.lfOutPrecision = OUT_DEFAULT_PRECIS;

logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;

logFont.lfQuality = ANTIALIASED_QUALITY;

logFont.lfPitchAndFamily = DEFAULT_PITCH;

strcpy(logFont.lfFaceName, "Arial");





D3DXCreateFontIndirect(device, &logFont, &font);


y me funciona perfectamente.

Ahora, te aviso de que el ID3DXFont es un interfaz muy cómodo de usar, pero es MUY lento.


Metaxas


P.D: Para saber lo que falla en una llamada a una función de las Directx, recoge el HRESULT que devuelve. En las Directx 8.1 viene un programita llamado 'DXErr' que al meterle el valor del HRESULT te da una descripción del código de error.                                
Título: Fuentes con ID3DXFont
Publicado por: Zaelsius en 12 de Noviembre de 2002, 09:43:57 AM
Si te das por vencido, puedes usar la clase CD3DFont, que viene en el SDK junto a los common files. Usarla es sencillo y no creo que sea más lenta que la otra opción.

Los ficheros a incluir son(creo): "d3dfont.h" y "d3dutil.h"

Mirate algun sample del SDK para ver como se usa.