#0 

11-12-2008 14:37:30

Stobbyo
Membre
Date d'inscription: 06-12-2008
Messages: 16

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 :

Code:

//! 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().

Code:

//! 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à !

Dernière modification par Stobbyo (11-12-2008 18:08:16)

Hors ligne


#1 

11-12-2008 18:29:23

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

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


#2 

11-12-2008 18:58:45

Stobbyo
Membre
Date d'inscription: 06-12-2008
Messages: 16

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 :

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


#3 

11-12-2008 19:01:25

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

Stobbyo :

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


#4 

11-12-2008 20:25:37

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
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


#5 

11-12-2008 20:39:31

Stobbyo
Membre
Date d'inscription: 06-12-2008
Messages: 16

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é
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
89 invités en ligne
Aucun membre connecté
RSS Feed