#1 

11-12-2008 13:37:30

Stobbyo
Membres
Date d'inscription:
Messages: 16
IP: 78.113.117.20
Courriel

Bonjour,

Voilà, il y a une fonction que j'utilise intensivement dans mon application : irr::gui::IGUIFont::draw.

J'ai remarqué, que quand j'affiche du texte le nombre de FPS, chute brutalement.

J'ai donc été voir l'implémentation de cette fonction. La voici :

//! draws some text and clips it to the specified rectangle if wanted
void CGUIFont::draw(const wchar_t* text, const core::rect<s32>& position, video::SColor color, bool hcenter, bool vcenter, const core::rect<s32>* clip)
{
	if (!Driver)
		return;

	core::dimension2d<s32> textDimension;
	core::position2d<s32> offset = position.UpperLeftCorner;
	core::rect<s32> pos;

	if (hcenter || vcenter || clip)
		textDimension = getDimension(text);

	if (hcenter)
		offset.X = ((position.getWidth() - textDimension.Width)>>1) + offset.X;

	if (vcenter)
		offset.Y = ((position.getHeight() - textDimension.Height)>>1) + offset.Y;

	if (clip)
	{
		core::rect<s32> clippedRect(offset, textDimension);
		clippedRect.clipAgainst(*clip);
		if (!clippedRect.isValid())
			return;
	}

	while(*text)
	{
		SFontArea& area = Areas[getAreaFromCharacter(*text)];

		offset.X += area.underhang;

		SpriteBank->draw2DSprite(area.spriteno, offset, clip, color);

		offset.X += area.width + area.overhang + GlobalKerningWidth;

		++text;
	}
}

Dans mon application, je n'utilise pas les alignements (hcenter, vcenter etc...).

Donc j'ai fait une autre fonction. Je n'ai pas surcharger celle-ci, j'ai juste mis une autre fonction : display().

//! Draw a text // MODIFICATION //
void CGUIFont::display(const wchar_t *text, const core::rect<s32> &position, video::SColor color)
{
    core::position2d<s32> offset = position.UpperLeftCorner;

    while(*text)
	{
		SFontArea& area = Areas[getAreaFromCharacter(*text)];

		offset.X += area.underhang;

		SpriteBank->draw2DSprite(area.spriteno, offset, 0, color);

		offset.X += area.width + area.overhang + GlobalKerningWidth;

		++text;
	}
}

J'ai recompilé Irrlicht, juste en debug pour l'instant. Je n'ai rien modifié d'autre mis à part l'ajout de cette fonction.

J'ai également modifié le nom de la dll générée, pour éviter de toucher à l'originale. (en passant)

J'ai recompilé mon application avec la version que j'ai modifié.

Et je me retrouve avec une " erreur de segmentation ".

Qui n'a à priori aucun rapport avec la modification que j'ai apportée dans le moteur.

Je ne demande pas à ce que vous tentiez de résoudre ce problème, je ne rajoute donc pas plus d'éléments.

Je voulais juste savoir comment vous y prendriez vous, pour modifier le moteur ?

Merci et a plus.

PS : Un truc bizarre dans la fonction issue d'Irrlicht est cette variable : core::rect<s32> pos;
elle ne semble pas être utilisée dans la fonction. Donc ??, je sais pas lol hmm
EDIT : C'est un oubli, elle ne sera plus là dans la version 1.5 smile

PS2 : Je suis bien conscient que cette modification n'améliorera pas miraculeusement la vitesse de l'application(quoique un peu quand même..) la question n'est pas là !


Hors ligne


#2 

11-12-2008 17:29:23

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.56.250.197
Courriel

Bonsoir Stobbyo. Je n'ai jamais ajouté de fonction au moteur pour le moment. Mais j'ai déjà compilé moi-même le moteur et sans soucis apparent.
Donc pas d'erreur lors de l'exécution des exemples avec la DLL compilée 'maison'. J'ai modifié deux trois truc pour le fun sans non plus rencontrer
de problèmes.

Avant d'intégrer ta propre fonction, as-tu déjà essayer de re-compiler le moteur tel qu'il est pour voir ce cela donne ?


Force et sagesse...

Hors ligne


#3 

11-12-2008 17:58:45

Stobbyo
Membres
Date d'inscription:
Messages: 16
IP: 78.113.117.20
Courriel

Salut smile

Je n'ai jamais compiler le moteur tel quel, je vais essayer de suite.

J'ai posté un message sur le forum anglais, mais je n'ai pas compris toute la réponse lol.

rogerborg Ecris:

Are you sure that you are linking against the rebuilt libIrrlicht.a? There's a problem in Irrlicht 1.4.2 in that the lib is actually built in /bin/Win32-gcc or /bin/Linux-gcc instead of /lib.
I'd delete all libIrrlicht.a / Irrlicht.dll / Irrlicht.so files in your /bin and /lib trees and build again to be sure.

Pour compiler, j'ai créé un nouveau dossier, j'ai copié/collé le répertoire " include ", et le fichier " source "
dans ce dossier.

J'ai ouvert l'espace de travail pour Code::Blocks contenu dans les fichiers sources, modifié les options du compilateur. Et voilà.

J'explique ça parce que c'est peut être pas comme ça qu'il faut faire.

En tout cas je te remercie pour ton aide.

Je donnerai des nouvelles dans ce sujet.

A la prochaine.


Hors ligne


#4 

11-12-2008 18:01:25

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.56.250.197
Courriel

Stobbyo Ecris:

J'ai ouvert l'espace de travail pour Code::Blocks contenu dans les fichiers sources, modifié les options du compilateur. Et voilà.

Arrrff, voilà déjà une différence entre nous deux, moi je n'utilise pas CodeBlock, mais VC++. Pour ce qui est de codeblock, effectivement, je ne vais pas
être d'un grand secours hmm


Force et sagesse...

Hors ligne


#5 

11-12-2008 19:25:37

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 88.139.140.67
Courriel  Site web

pour ton erreur de segmentation fait un petit rebuild des fois sa suffi big_smile
sinon pour modifier le moteur personnellement je préfère le faire a l'intérieur de mon application ...
sa permet de garder irrlicht intact ( pratique pour svn )et de pouvoir debuger plus rapidement smile

class MYGUIFont : public IGUIFont
{
.......
};

Hors ligne


#6 

11-12-2008 19:39:31

Stobbyo
Membres
Date d'inscription:
Messages: 16
IP: 78.113.117.20
Courriel

Compilation réussie ..

Ok Magun, je suis d'accord. Je sais pas ce que j'ai contre l'héritage lol (cf : Pointeur fonctions dans une classe )

Merci à vous, smile

A plus.


Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
169 invités en ligne
membre en ligne: -
RSS Feed