Plantage avec DrawText (LPD3DXFONT)

loicus Messages postés 46 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 3 mai 2008 - 24 mai 2006 à 20:37
loicus Messages postés 46 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 3 mai 2008 - 26 mai 2006 à 12:28
Bonjours.... j'ai un gros gros problème.....

j'ai fait une petite classe, pour encapsuler tout ce qui est en rapport avec le texte... ;)
mon programme marche très bien en mode fenetré... en revanche, il plante très rapidement en mode fullscreen...  et je ne vois vraiment pas pourquoi... si quelqu'un pouvait m'éclairer ca serait très gentil!

le header :
struct Font_Adaptateur {std::vector<LPD3DXFONT> Font;};


class D3D_font 
{
public:
 D3D_font(D3D_object* d3d_object);
 virtual ~D3D_font();
    
 HRESULT  D3D_font:: Create_Font  (UINT Height, UINT* Font_i);    
    D3D_font:: DrawText  (UINT Adaptateur_i,UINT Font_i,char* texte);


 D3D_object* DX;


 Font_Adaptateur* Font_Ecran;
 std::vector<LPD3DXFONT>::iterator Font_it;


 RECT  screen_rect;
};

le cpp:

D3D_font::D3D_font(D3D_object* d3d_object)
{
 DX  = d3d_object;


 Font_Ecran = new Font_Adaptateur[DX->Adaptateur_Count];


 screen_rect.left = 0;
 screen_rect.top  = 0;
 screen_rect.right = DX->Width;
 screen_rect.bottom = DX->Height; 
}


D3D_font::~D3D_font()

 if(Font_Ecran!=NULL) delete [] Font_Ecran;
}




HRESULT D3D_font::Create_Font(UINT Height, UINT* Font_i)

 
 for(UINT Adaptateur_i = 0 ; Adaptateur_i < DX->Adaptateur_Count ; Adaptateur_i++)
 {  


  HFONT Tempory_HFont = CreateFont( Height, 0, 0, 0, FW_BOLD, FALSE,
           FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
           CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY,
           VARIABLE_PITCH, "Arial" );


  if( Tempory_HFont == NULL ) return E_FAIL;


  LPD3DXFONT Tempory_Font;


  if( FAILED( D3DXCreateFont( DX->Device[Adaptateur_i], Tempory_HFont, &Tempory_Font))) return E_FAIL;
  if(Tempory_Font == NULL){ return E_FAIL;  }


  Font_Ecran[Adaptateur_i].Font.push_back(Tempory_Font);  
  *Font_i = Font_Ecran[Adaptateur_i].Font.size() - 1;
 }


 return S_OK;


}

D3D_font::DrawText(UINT Adaptateur_i,UINT Font_i,char* texte)

 if(Font_Ecran!=NULL){
  if(Font_Ecran[Adaptateur_i].Font[Font_i]!=NULL)
  {
   if( SUCCEEDED( Font_Ecran[Adaptateur_i].Font[Font_i]->Begin() ) )
   { 
    Font_Ecran[Adaptateur_i].Font[Font_i]->DrawText(texte,-1,&screen_rect,DT_CENTER | DT_BOTTOM, D3DCOLOR_XRGB(0,0,255));
    Font_Ecran[Adaptateur_i].Font[Font_i]->End();  
   }
  }
 }

l'appel dans le programme :
VOID Render()
{  
 for(UINT Adaptateur_i = 0; Adaptateur_i < DX->Adaptateur_Count; Adaptateur_i++)
 {
  if(DX->Device[Adaptateur_i] != NULL)
  {
   DX->Device[Adaptateur_i]->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 ); 
   if( SUCCEEDED( DX->Device[Adaptateur_i]->BeginScene() ) )
   {
    DX->Device[Adaptateur_i]->SetStreamSource( 0, DX->VertexBuffer[Adaptateur_i], 0, sizeof(CUSTOMVERTEX) );
    DX->Device[Adaptateur_i]->SetFVF( D3DFVF_CUSTOMVERTEX );
    DX->Device[Adaptateur_i]->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );      


    DF->DrawText(Adaptateur_i,F0,"test");//Ca ne plante pas si je retire cette ligne!!!


    DX->Device[Adaptateur_i]->EndScene();
   } 
   DX->Device[Adaptateur_i]->Present( NULL, NULL, NULL, NULL );
  }
 }
}

je sais que c'est un peu dure de voir comme ca, ds un code partielle mais bon... y a peut être une raison fondamentalle qui va vous sauter au yeux...

encore merci d'avance

loic,

6 réponses

niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
24 mai 2006 à 23:36
Peut etre un TCHAR au lieu d'un char*
0
loicus Messages postés 46 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 3 mai 2008
25 mai 2006 à 07:45
non, ca n'as pas l'air d'être ca....
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
25 mai 2006 à 14:40
a tu regarder sur la FAQ Directx de c.developpez.com


http://jeux.developpez.com/faq/directx/
0
loicus Messages postés 46 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 3 mai 2008
25 mai 2006 à 15:56
oui, mais ca ne m'aide pas....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
26 mai 2006 à 11:55
Où-est ce que ça plante exactement ?

Parfois c'est la définition de la fenêtre Windows en plein écran qu'il faut revoir et pas le code DirectX.
Fait attention à ta déclaration de D3DPRESENT_PARAMETERS nécessaire pour créer LPDIRECT3DDEVICE9. C'est souvent en modifiant ces paramètres qu'on s'en sort.
0
loicus Messages postés 46 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 3 mai 2008
26 mai 2006 à 12:28
bhen ce qui est très byzare c'est que si je n'apelle pas la fonction drawtext, ca ne plante pas... même en pleine écran  (sur un ou sur plusieur moniteur)

et dès que j'utilise
DF->DrawText(Adaptateur_i,F0,"test");

où même si j'utilise juste drawtexte sans passé par la classe... ca plante

c'est pour ca que je comprend pas trop....
0
Rejoignez-nous